本文我们介绍在three.js中如何给3D场景添加背景,我们有3种方式来实现这个目的。通过html添加背景元素,这实际上一个2D背景;

在three.js加载图片并设置为scene.background,这种方法的好处是可以被后处理(post-processing)效果所影响;

在three.js中绘制天空盒作为背景。

第一种是直接在canvas的css样式中设置background(或者background-image),

然后three.js中设置渲染的alpha为true,这样就表示3D场景是透明的,不会隐藏后面的背景。

修改后结果如下:

第二种方法也很简单,代码示例如下:const loader = new THREE.TextureLoader();

const bgTexture = loader.load('/path/to/sky.jpg');

scene.background = bgTexture;

不过这种情况下,背景图片可能会被拉伸,解决方法是设置背景贴图的offset和repeat属性来绘制其中一部分:// Set the repeat and offset properties of the background texture

// to keep the image's aspect correct.

// Note the image may not have loaded yet.

const canvasAspect = canvas.clientWidth / canvas.clientHeight;

const imageAspect = bgTexture.image ? bgTexture.image.width / bgTexture.image.height : 1;

const aspect = imageAspect / canvasAspect;

bgTexture.offset.x = aspect > 1 ? (1 - 1 / aspect) / 2 : 0;

bgTexture.repeat.x = aspect > 1 ? 1 / aspect : 1;

bgTexture.offset.y = aspect > 1 ? 0 : (1 - aspect) / 2;

bgTexture.repeat.y = aspect > 1 ? 1 : aspect;

但这个方法和第一种方法基本类似,其实还是个2D背景。

更多的情况下,我们需要使用一个3D环境背景,也就是所谓的天空盒(Skybox)。

skybox其实就是一个box模型(这个box一般可以是cube或者sphere),把sky图像绘制在上面。我们把相机放在box里面,这样看起来就像是在一个环境背景中。

实现skybox最常见的方法是制作一个立方体,对其应用纹理,从内部绘制它。在立方体的每一侧放置一个纹理(使用纹理坐标),看起来像地平线上的某个图像。使用天空球体(sky sphere)或天空圆顶(sky dome)也是比较常见的。只需创建一个立方体或球体,应用一个纹理,将其标记为THREE.BackSide,这样我们渲染的是内部而不是外部,然后直接或类似地将其放置在上面的场景中,或者,创建两个场景,一个特殊的场景来绘制skybox/sphere/dome,另一个普通的场景来绘制其他所有内容。使用普通的远景相机来绘制,不需要正交照相机。

实现天空盒的另外一个方法是使用Cubemap,立方体贴图是一种特殊的纹理,它有六个面。它不使用标准纹理坐标,而是使用从中心向外的方向来决定如何获得颜色。要使用它们,我们使用THREE.CubeTextureLoader()加载它们,然后将其用作场景的背景:

three 天空球_three.js添加场景背景和天空盒(skybox)相关推荐

  1. pdf.js添加关键词背景按钮

    pdf.js添加关键词背景按钮 这是根据pdf.js输入搜索框后的属性赋参 var PDFFindBar = PDFViewerApplication.findController.findBar;P ...

  2. js室内地图开发_three.js搭建室内场景教程

    公司做商城.消防.用电等项目,需要实现楼层和设备的可视化,以前都是使用其他建模工具创建的整体模型,再使用three.js的加载器加载到场景中,但是这样的加载存在缺陷,比如不能给模型的元素赋属性.不能单 ...

  3. three 天空球_用three.js创建一个简易的天空盒

    本文创建的天空盒是用六张图片来创建的.笔者会论述两种方法来创建,都是最简单基本的方法,不涉及着色器的使用. 一种是创建一个盒子,然后将图片作为盒子6个面的纹理贴上来创建. 另一种则是简单的将纹理作为场 ...

  4. three.js添加3d模型

    three官方的几何体也就那么几个,想要生成各种各样的模型,其难度十分之大,这时引入外部模型也不失为一种选择.具体引入办法如下. 导入依赖 import * as THREE from "t ...

  5. Laya Air+Unity3D双引擎带你做个天空球3D小游戏(上篇)

    上个月有个gz让我高仿做一个的天空球微信小游戏,当晚做出Demo后第二天那gz居然说不要了(很气愤),所以这个Demo一直保留至今,今天刚好就做为供大家学习Laya3D的demo分享给大家 国际惯例先 ...

  6. 这是基于three.js+photo-sphere-viewer.js 全景图场景切换

    这是基于three.js+photo-sphere-viewer.js 全景图场景切换 效果图 :http://122.51.121.122:8066/szovo csdn下载链接: https:// ...

  7. 3dmax给模型添加渐变背景有哪些方法

    3dmax给模型添加渐变背景有哪些方法 3dmax软件给模型添加渐变背景有什么方法?3dmax软件模型制作完成后,渲染模型背景黑色的居多.为了让模型更加逼真,我们也可以将背景颜色改为渐变背景.那么,今 ...

  8. JS添加/修改CSS样式

    JS添加/修改CSS样式是通过.style.xxxx属性=值来实现的,记得是等号赋值. document.getElementById("xx").style.xxx=xxxxx; ...

  9. vue js樱花飘落背景特效

    vue js樱花飘落背景特效 先上效果图 下载js文件:链接 或直接保存源码 var stop, staticx; var img = new Image(); img.src = "dat ...

最新文章

  1. 集合恒等式定律及文氏图
  2. 企业网络推广专员浅析企业网络推广后期网站优化重点因素有哪些?
  3. Java程序员从笨鸟到菜鸟之(六十七)细谈Spring(一)spring简介
  4. mysql+提升更新语句效率_MySQL加快批量更新 UPDATE优化
  5. linux按键驱动中的结构体,linux 驱动之input子系统(gpio-keys)实现
  6. python numpy官网_Python Numpy 教程(上)
  7. 微信h5网页关闭分享以及关闭当前页面
  8. Oracle放大招:MySQL 即将支持 Hash Join
  9. (55)FPGA基本约束-UCF与XDC(第11天)
  10. 电子计算机专业vs土木工程专业,最难学十大工科专业 不想累成狗就别去(高薪)...
  11. ajax清除session,跳出iframe框架页面后跳转页面
  12. 易语言学习笔记(1)
  13. [附源码]Java计算机毕业设计SSM高等数学在线学习平台
  14. 最简示例 简介洗牌函数 之 __shfl_sync() cuda 之 shuffle
  15. [Err] 1418 - This function has none of DETERMINIST
  16. RSA之 两组e与φ(n)不互素解法
  17. win7系统下阿里旺旺无法登陆怎么解决
  18. 计算机网络面试题总结之一
  19. Linux桌面系统x11原理简介
  20. Spring Cloud Alibaba 2021.0.1.0 版本发布啦

热门文章

  1. C语言魔术阵,C语言编程:扑克牌魔术
  2. 将VUE项目部署到服务器 nginx代理配置
  3. mysql导入数据库_mysql 导入数据库 命令操作
  4. linux递归修改文件权限
  5. 下级路由访问上级文件服务器,怎样访问下一级路由器问答
  6. 【数据分析与挖掘】期末复习笔记(不挂科)
  7. 合并多个Excel文件
  8. 好程序员大前端送干货Web前端开发框架汇总
  9. 学会这样写代码,一看就是资深工程师,代码简洁之道PHP版本
  10. python的默认安装位置查询