#ThreeJS#之外景天空盒子
2017-03-27 16:57
417 查看
效果图:
外景天空盒子的使用例:
var outdoorSceneBox = new OutdoorSceneBox(); scene.add(editor.outdoorSceneBox.createOutdoorSceneBox(outdoorSceneConfigInfo));
[b]外景天空盒子的配置例(上述代码中的outdoorConfigInfo):
[/b]
"outdoor_scene":{
"rootPath":"resources/img/editor/outdoor_scene",
"sceneStyleList":[
{"subPath":"natural","title":"自然景观","sceneCount":2},
{"subPath":"city","title":"城市景观","sceneCount":2}
]
}
外景天空盒子的实现代码:
/** * 外景盒子 */ var OutdoorSceneBox = function() { var directions = ["right", "left", "top", "bottom", "back", "front"]; var imageSuffix = ".jpg"; var outdoorSceneBox; /** * 创建外景盒子 */ this.createOutdoorSceneBox = function(outdoorSceneInfo){ var sceneGeometry = new THREE.BoxGeometry(2000, 800, 2000); var sceneMaterial = loadDefaultMaterial(outdoorSceneInfo.rootPath); outdoorSceneBox = new THREE.Mesh(sceneGeometry, sceneMaterial); outdoorSceneBox.name = "outdoorSceneBox"; outdoorSceneBox.position.y += 100; return outdoorSceneBox; } /** * 显示外景 */ this.show = function(){ if(outdoorSceneBox) outdoorSceneBox.visible = true; } /** * 隐藏外景 */ this.hide = function(){ if(outdoorSceneBox) outdoorSceneBox.visible = false; } /** * 切换外景材质 */ this.switchOutdoorScene = function(outdoorScenePath, callback){ for (var i = 0; i < 6; i++) { outdoorSceneBox.material.materials[i].dispose(); } outdoorSceneBox.material.materials.splice(0, 6); outdoorSceneBox.material.materials = loadMaterial(outdoorScenePath, callback); } /** * 加载指定路径下的材质图片 * @param {String} outdoorScenePath */ function loadMaterial(outdoorScenePath, callback){ var materialArray = []; for (var i = 0; i < 6; i++){ materialArray.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture(outdoorScenePath + directions[i] + imageSuffix, undefined, callback), side: THREE.BackSide })); } return materialArray; } /** * 加载默认材质图片 * @param {String} outdoorScenePath */ function loadDefaultMaterial(outdoorScenePath){ var materialArray = []; for (var i = 0; i < 6; i++){ materialArray.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture(outdoorScenePath + "/default.jpg"), side: THREE.BackSide })); } return new THREE.MeshFaceMaterial(materialArray); } return this; }
var outdoorSceneBox = new OutdoorSceneBox(); scene.add(editor.outdoorSceneBox.createOutdoorSceneBox(outdoorSceneConfigInfo));
/** * 外景盒子 */ var OutdoorSceneBox = function() { var directions = ["right", "left", "top", "bottom", "back", "front"]; var imageSuffix = ".jpg"; var outdoorSceneBox; /** * 创建外景盒子 */ this.createOutdoorSceneBox = function(outdoorSceneInfo){ var sceneGeometry = new THREE.BoxGeometry(2000, 800, 2000); var sceneMaterial = loadDefaultMaterial(outdoorSceneInfo.rootPath); outdoorSceneBox = new THREE.Mesh(sceneGeometry, sceneMaterial); outdoorSceneBox.name = "outdoorSceneBox"; outdoorSceneBox.position.y += 100; return outdoorSceneBox; } /** * 显示外景 */ this.show = function(){ if(outdoorSceneBox) outdoorSceneBox.visible = true; } /** * 隐藏外景 */ this.hide = function(){ if(outdoorSceneBox) outdoorSceneBox.visible = false; } /** * 切换外景材质 */ this.switchOutdoorScene = function(outdoorScenePath, callback){ for (var i = 0; i < 6; i++) { outdoorSceneBox.material.materials[i].dispose(); } outdoorSceneBox.material.materials.splice(0, 6); outdoorSceneBox.material.materials = loadMaterial(outdoorScenePath, callback); } /** * 加载指定路径下的材质图片 * @param {String} outdoorScenePath */ function loadMaterial(outdoorScenePath, callback){ var materialArray = []; for (var i = 0; i < 6; i++){ materialArray.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture(outdoorScenePath + directions[i] + imageSuffix, undefined, callback), side: THREE.BackSide })); } return materialArray; } /** * 加载默认材质图片 * @param {String} outdoorScenePath */ function loadDefaultMaterial(outdoorScenePath){ var materialArray = []; for (var i = 0; i < 6; i++){ materialArray.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture(outdoorScenePath + "/default.jpg"), side: THREE.BackSide })); } return new THREE.MeshFaceMaterial(materialArray); } return this; }
相关文章推荐
- three.js 天空盒子使用方法
- three.js自学之旅(8)—— 天空盒研究、完善nodejs服务器、使用TrackballControls控制器
- 23 Three.js的光源种类
- 24 Three.js的环境光源THREE.AmbientLight
- 利用HTML5构筑物理模拟环境~ WebGL库Three.js入门(1/3)
- Unity5.x中Skybox天空盒子的设置的两种方法
- Three.js源码阅读笔记(Object3D类)
- three.js 源码注释(五十九)objects/Mesh.js
- three.js 06-05 之 ParametricGeometry 几何体
- 02 使用three.js开发全景漫游 视角问题
- three.js 源码注释(六十二)objects/SkinnedMesh.js
- three.js 源码注释(六十七)objects/PointCloud.js
- Three.js呈现3D效果机房--初步方案
- three.js教程一场景的基本组件
- three.js 01-04 之简单动画
- three.js全景
- three.js 显示三维模型(贴图)
- three.js 源码注释(六十八)extras/geometries/BoxGeometry.js
- DirectX-3d中.x模型转换成three.js可用的obj文件或者js文件
- three.js 01-06 之使用 ASCII 效果