本文我们介绍在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. 华为路由器qos car+nat+dhcp+vlan配置心得
  2. grafana3.1.0安装配置
  3. android简化log输出方法
  4. Second Week: Git与Github的使用
  5. 2018-08-13 Head First OO分析设计一书略读与例子中文化
  6. 使用FiddlerCore来测试WebAPI
  7. mysql历史日志文件_MySQL 历史 binlog 日志处理
  8. C/C++:各类型变量占用字节
  9. 如何免费的让网站启用HTTPS
  10. 怎么在地图上画圆 php,SOSO地图API使用(一)在地图上画圆实现思路与代码
  11. SpringCloud工作笔记044---SpringCloud分布式服务器配置要求_记录一下
  12. 编写高质量的VB代码
  13. 【操作系统】Nachos 内核线程
  14. 职称计算机 frontpage 2003,计算机职称考试FrontPage2003考试大纲
  15. 《高效能人士的七个习惯》:运用才是关键
  16. 计算机应用宣传传统文化,计算机应用工程系创建优秀传统文化特色班级侧记
  17. android画布橡皮,Android绘图实现橡皮擦功能
  18. WebUploader文件图片上传插件的使用
  19. 笔记本电脑 a disk read error occurred 问题解决
  20. 多图带您领略Windows 10 Server虚拟化平台风采

热门文章

  1. 理解前端组件化、模块化、工程化
  2. 经常熬夜的MM必学的皮肤保养技巧
  3. zap攻击实例_owasp zap 安全审计工具 功能详解
  4. JS 异步编程方法:6种方案
  5. sm是什么? 什么是sm? 天使人间解答 希望可以帮助大家正确的理解SM
  6. VsCode写C# 猜猜随机数0-9(限制三次机会)可循环使用
  7. 超详图解DNS域名解析全过程
  8. 兔子maya骨骼绑定_教你怎么用Maya制作卡通兔子怪兽
  9. vue-quill-editor富文本 上传图片可调节图片大小
  10. 好用的mac图片浏览工具有哪款?看这里