1.天空盒概述以及效果


类似这种全景图片,我们将图片切成六个小图片,分别将六个小图片贴在一个正方体的里面,这样当我们置身于这个正方体里面的时候,就像在看全景图一样。

效果如下:

2.threejs代码

     var path = '/sky/'var format = '.jpg'var urls = [path + 'px' + format, path + 'nx' + format,path + 'py' + format, path + 'ny' + format,path + 'pz' + format, path + 'nz' + format]var materials = []for (var i = 0; i < urls.length; ++i) {var loader = new this.THREE.TextureLoader()// loader.setCrossOrigin( this.crossOrigin );var texture = loader.load(urls[i], function () {}, undefined, function () {})materials.push(new this.THREE.MeshBasicMaterial({map: texture,side: this.THREE.BackSide// transparent: true,// needsUpdate:true}))}var cube = new this.THREE.Mesh(new this.THREE.CubeGeometry(9000, 9000, 9000), materials)cube.name = 'sky'this.scene.add(cube)var axes = new this.THREE.AxesHelper(100000)this.scene.add(axes)

思路:首先创建一个materials的数组,数组中的每一个元素都是一个MeshBasicMaterial的实例,利用方法将材质贴图附着在正方体的内侧。
MeshBasicMaterial
参数map指的是贴图,默认值为null
参数side的含义是贴图的位置,这里我们选择的是this.THREE.BackSide,意味着贴图位于正方体的里面。
transparent: true当材质中包含有透明元素的时候需要用到,要不然透明的部位会有颜色存在。

this.THREE.Mesh(new this.THREE.CubeGeometry(9000, 9000, 9000), materials)
创建一个几何体,第二个参数是材质对象的数组
new this.THREE.AxesHelper(100000)
创建坐标轴,长度为100000

3.完整代码

<template><div id="container"></div>
</template><style lang="scss">
html,body{padding: 0;margin: 0;
}
</style><script>
import { OBJLoader, MTLLoader } from 'three-obj-mtl-loader'
import OrbitControls from 'three-orbitcontrols'
export default {name: 'ThreeTest',data () {return {camera: null,scene: null,renderer: null,mesh: null,controls: null,crossOrigin: ''}},methods: {init: function () {const that = thisthis.scene = new this.THREE.Scene()var path = '/sky/'var format = '.jpg'var urls = [path + 'px' + format, path + 'nx' + format,path + 'py' + format, path + 'ny' + format,path + 'pz' + format, path + 'nz' + format]var materials = []for (var i = 0; i < urls.length; ++i) {var loader = new this.THREE.TextureLoader()// loader.setCrossOrigin( this.crossOrigin );var texture = loader.load(urls[i], function () { console.log('q') }, undefined, function (e) { console.log(e) })materials.push(new this.THREE.MeshBasicMaterial({map: texture,side: this.THREE.BackSide// transparent: true,// needsUpdate:true}))}var cube = new this.THREE.Mesh(new this.THREE.CubeGeometry(9000, 9000, 9000), materials)cube.name = 'sky'this.scene.add(cube)var ambient = new this.THREE.AmbientLight(0xcccccc)this.scene.add(ambient)var axes = new this.THREE.AxesHelper(100000)this.scene.add(axes)var width = window.innerWidth// 窗口宽度var height = window.innerHeight// 窗口高度var k = width / height// 窗口宽高比// 创建相机对象this.camera = new this.THREE.PerspectiveCamera(45, width / height, 1, 1000000)this.camera.position.set(1000, 0, 1000)// 设置相机位置this.camera.lookAt(new this.THREE.Vector3(0, 0, 0))// 设置相机方向(指向的场景对象)/*** 创建渲染器对象*/this.renderer = new this.THREE.WebGLRenderer({antialias: true})this.renderer.setSize(width, height)this.renderer.setClearColor(0xb9d3ff, 1)// 设置背景颜色document.getElementById('container').appendChild(this.renderer.domElement)// body元素中插入canvas对象// 执行渲染操作this.renderer.render(this.scene, this.camera)this.controls = new OrbitControls(this.camera, document.getElementById('container'))// 创建控件对象this.controls.addEventListener('change', this.animate())},animate: function () {requestAnimationFrame(this.animate)this.renderer.render(this.scene, this.camera)}},mounted () {this.init()// this.animate()}
}
</script>

说明
this.renderer = new this.THREE.WebGLRenderer({antialias: true})
这个参数可以有效消除锯齿。

threejs实现天空盒相关推荐

  1. Threejs专用天空盒素材,五种天空盒素材免费下载

    使用Threejs开发web3D场景,模拟现实环境让场景更有真实感会用到天空盒.实际相当于创建了一个很大的立方体,并且将摄像机和场景中的物体都在这个立方体里面,这样看到的就是模拟的真实环境. 我整理了 ...

  2. ThreeJs创建天空盒

    ThreeJS创建天空盒比较简单,可以理解成给一个立方体贴图,所以需要给六个面分别贴图,6张图构建整个场景的图片.这六张图分别是朝前的(posz).朝后的(negz).朝上的(posy).朝下的(ne ...

  3. ThreeJS思维导图总结

    ThreeJS思维导图源文件下载 ThreeJS入门场景(scene).相机(camera).渲染器(renderer) 正交投影相机/透视投影相机 环境光/点光源/聚光灯/平行光 ThreeJS项目 ...

  4. ThreeJS的特效合成器和后期处理通道

    最近要写个 web 交互式发光可交互的框架.没查到啥好资料,自己一个人摸索了很久,有些失望,可是毕竟是探索过的东西,所以做个记录,怀念我过去好多天掉的青丝(捂脸).我在前面那篇博客里面已经介绍了如何让 ...

  5. webgl 基础渲染demo_WebGL + ThreeJS 实现实时水下焦散 Part 1

    知乎视频​www.zhihu.com 采用 WebGL 和 ThreeJS 运行实时焦散运算,需要一点相关基础.本文主要介绍焦散的原理以及计算方法 原作者 https://github.com/mar ...

  6. Three.js——天空盒

    Three.js--天空盒 参考文档 Threejs Scene 纯色背景 简单来说就是整个背景是纯色的,实际开发中很少用到这种情况,毕竟不是很好看. scene.background = new T ...

  7. Threejs实现全景图功能

    可以利用Threejs中的立方体或者球体实现全景图功能,把立方体或球体当成天空盒子,将无缝衔接的图片贴上,看起来就像在一个场景中,相机一般放置在中央,只要离边缘足够远就看不出是立方体或球体,但如果超出 ...

  8. 基于 mapboxgl+threejs+react+ts 三维 webgis 实战系列教程

    全网唯一 基于 mapboxgl+threejs+react+ts 的 三维 webgis 实战系列教程: 后续将分享一些下面的功能: 基本项目搭建: threejs + mapboxgl 版 Hel ...

  9. ThreeJS 纹理贴图创建一个我的世界草地方块

    ThreeJS 纹理贴图创建一个我的世界草地方块 开始准备使用ThreeJS写一个类似<我的世界>场景的射击类游戏,地形和我的世界很相似.场景中需要进行很多的纹理贴图,本篇文章主要以给一个 ...

最新文章

  1. 安卓中如何判断一个字符串是否为空
  2. oracle同时更新多列数据,ORACLE 11G 表联合更新多列
  3. sap 事务代码跳过权限检查
  4. C#中获取多个对象list中对象共有的属性项
  5. React Native Weex 区别
  6. oracle错误12637,TNS-12537 TNSconnection closed ORA-609错误处理
  7. SAP License:雾里看花系列——SAP顾问应该脱离”保姆”的角色
  8. 4.2 优化数据访问
  9. 图神经网络/GCN 入门
  10. 使用第三方插件Curvy为unity场景快速生成运动轨迹与赛道
  11. java 后端,Java后端岗位职责描述
  12. bada开发tips
  13. 基金投资理财专栏介绍
  14. 推荐几个学习编程的网站
  15. MySQL-查看数据库
  16. (附源码)springboot客户信息管理系统 毕业设计 181936
  17. osm数据下载 python_osm数据下载 python_批量下载osm的分区域的osm文件
  18. java kryo register_kryo处理unmodifiedList报错问题
  19. Vue 中 keep-alive 组件与 router-view 组件的那点事
  20. Python-Django毕业设计高校田径运动会管理(程序+LW)

热门文章

  1. [agc 049E][凸性dp][小计数] Increment Decrement
  2. 在ubuntu中设置使用网络摄像头
  3. 【PAT】进制回文数
  4. 【游戏联机】群星2.5.1 可联机 free 正版 all dlc
  5. 无忧无虑的生活,只存在于梦想里吗?
  6. Jenkins Pipeline 脚本
  7. 用计算机最炫民族风乐谱,天谕手游最炫民族风乐谱代码分享
  8. vue开发饿了吗外卖 npm报错
  9. # HTML5期末大作业:海贼王影视网站设计——仿京东-海贼王(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 wweb前端期末大作业 网页设计实例 企业网站制作
  10. 基于Frobenius范数的标准NMF更新公式推导