用6个面组成的立方体作为场景图,发现会出现变形的现象,css3DRenderer 不会变形,但是不方便增加文字,最后采用scene的背景作为场景,背景是用cubeTextureLoader()加载的。

切换场景1

切换场景2

var width, height;

var renderer;

function initRender() {

width = document.getElementById('canvasWrap').clientWidth;

height = document.getElementById('canvasWrap').clientHeight;

renderer = new THREE.WebGLRenderer({ antialias: true });

renderer.setSize(width, height);

document.getElementById('canvasWrap').appendChild(renderer.domElement);

}

var camera;

function initCamera() {

camera = new THREE.PerspectiveCamera(75, width / height, 1, 1000);

console.log(camera)

camera.position.set(0, 0, 300);

}

var scene;

function initScene() {

scene = new THREE.Scene();

//scene.background = new THREE.TextureLoader().load( '../textures/2294472375_24a3b8ef46_o.jpg' ) //scene不会跟着旋转

scene.background = new THREE.CubeTextureLoader()

.setPath('../dist/textures/cube/Bridge2/').load(

[

'posx.jpg',

'negx.jpg',

'posy.jpg',

'negy.jpg',

'posz.jpg',

'negz.jpg'

]

);

console.log(scene)

}

var light;

function initLight() {

//scene.add(new THREE.AmbientLight(0x404040));

scene.add(new THREE.AmbientLight(0xffffff));

light = new THREE.DirectionalLight(0xffffff);

//light.position.set(1,1,1);

light.position.set(0, 0, 50);

scene.add(light);

}

var text = "first text";

function showText() {

const canvas = document.getElementById("canvas");

const ctx = canvas.getContext("2d");

ctx.canvas.width = 256;

const x = 0;

const y = 32;

ctx.fillStyle = "red";

ctx.font = "30px arial";

ctx.textAlign = "left";

ctx.textBaseline = "middle";

ctx.fillText(text, x, y)

}

var sprite

function showSprite() {

showText()

const canvasTexture = new THREE.CanvasTexture(

document.querySelector("#canvas")

)

//canvasTexture.needsUpdate = true; //注意这句不能少

const spritMaterial = new THREE.SpriteMaterial({

map: canvasTexture

})

sprite = new THREE.Sprite(spritMaterial)

sprite.position.set(-380, 100, 0);

//精灵的默认大小很小估计是[1,1,1]

sprite.scale.set(0.64 * 256, 0.64 * 64, 1);

scene.add(sprite)

}

function initModel() {

var texture1 = new THREE.TextureLoader().load('../dist/textures/cube/Bridge2/posx.jpg')

var texture2 = new THREE.TextureLoader().load('../dist/textures/cube/Bridge2/negx.jpg')

var texture3 = new THREE.TextureLoader().load('../dist/textures/cube/Bridge2/posy.jpg')

var texture4 = new THREE.TextureLoader().load('../dist/textures/cube/Bridge2/negy.jpg')

var texture5 = new THREE.TextureLoader().load('../dist/textures/cube/Bridge2/posz.jpg')

var texture6 = new THREE.TextureLoader().load('../dist/textures/cube/Bridge2/negz.jpg')

var materialArr = [

//纹理对象赋值给6个材质对象

new THREE.MeshBasicMaterial({ map: texture1, side: THREE.DoubleSide }),

new THREE.MeshBasicMaterial({ map: texture2, side: THREE.DoubleSide }),

new THREE.MeshBasicMaterial({ map: texture3, side: THREE.DoubleSide }),

new THREE.MeshBasicMaterial({ map: texture4, side: THREE.DoubleSide }),

new THREE.MeshBasicMaterial({ map: texture5, side: THREE.DoubleSide }),

new THREE.MeshBasicMaterial({ map: texture6, side: THREE.DoubleSide })

];

var boxGeometry = new THREE.BoxGeometry(200, 200, 200, 100, 100, 100);

//boxGeometry.scale( -1, 1, 1 );

var cube = new THREE.Mesh(boxGeometry, materialArr);

// var cube = new THREE.Mesh(new THREE.SphereGeometry(50, 180, 120), material)

//new THREE.SphereGeometry(3, 18, 12)

scene.add(cube);

}

//用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放

var controls;

function initControls() {

controls = new THREE.OrbitControls(camera, renderer.domElement);

// 如果使用animate方法时,将此函数删除

//controls.addEventListener( 'change', render );

// 使动画循环使用时阻尼或自转 意思是否有惯性

controls.enableDamping = true;

//动态阻尼系数 就是鼠标拖拽旋转灵敏度

//controls.dampingFactor = 0.25;

//是否可以缩放

controls.enableZoom = true;

//是否自动旋转

controls.autoRotate = false;

//设置相机距离原点的最远距离

//controls.minDistance = 50;

//设置相机距离原点的最远距离

//controls.maxDistance =200;

//是否开启右键拖拽

controls.enablePan = true;

}

function render() {

renderer.render(scene, camera);

}

//窗口变动触发的函数

function onWindowResize() {

width = document.getElementById('canvasWrap').clientWidth;

height = document.getElementById('canvasWrap').clientHeight;

camera.aspect = width / height;

camera.updateProjectionMatrix();

render();

renderer.setSize(width, height);

}

function animate() {

//更新控制器

controls.update();

render();

requestAnimationFrame(animate);

}

function draw() {

initRender();

initScene();

initCamera();

//initLight()

showSprite();

initModel();

initControls();

animate();

window.onresize = onWindowResize;

}

var btn = document.getElementById("btn1");

btn.onclick = function() {

console.log(scene)

//scene.background = new THREE.Color( 0xff0000 )

scene.background = new THREE.CubeTextureLoader()

.setPath('../dist/textures/cube/Park2/').load(

[

'posx.jpg',

'negx.jpg',

'posy.jpg',

'negy.jpg',

'posz.jpg',

'negz.jpg'

]

);

}

var btn = document.getElementById("btn2");

btn.onclick = function() {

console.log(scene)

//scene.background = new THREE.Color( 0xff0000 )

scene.background = new THREE.CubeTextureLoader()

.setPath('../dist/textures/cube/Bridge2/').load(

[

'posx.jpg',

'negx.jpg',

'posy.jpg',

'negy.jpg',

'posz.jpg',

'negz.jpg'

]

);

}

//MeshFaceMaterial 不加灯光会不显示,MeshBasicMaterial可以不用光线,MeshPhongMaterial一定要有光线,否则不显示

threejs 加载两个场景_three.js 场景切换相关推荐

  1. threejs 加载两个场景_threejs中的三维场景操作

    在threejs开发中,不可避免的需要对三维场景进行交互,例如对模型进行旋转,缩放,平移等操作.接下来,我们就聊一聊如何进行三维场景的交互. 控制的对象是谁? 在三维的世界中,如果想达到场景的TRS( ...

  2. 【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据

    本文接着系列文章(2)进行介绍,以VUE2为开发框架,该文涉及代码存放在HelloWorld.vue中. 相较于上一篇文章对div命名class等,该文简洁许多. <template> & ...

  3. cdn加载vue很慢_Vue.js 项目打包优化实践

    首先上结果: 把常用的 Vue,router,vuex,axios 的 runtime 包拆分了出来,改为 cdn: 另外就是对于自己编写的业务代码进行分包,根据路由进行懒加载,可以较好的提高首屏加载 ...

  4. ThreeJS加载geojson数据实现3D地图

    ThreeJS加载geojson数据实现3D地图,主要通过借助geojson地理信息数据转摩托尔坐标实现,中间借助了d3.js的地图处理方法,最后通过threejs渲染到页面上: 通过平台获取GeoJ ...

  5. threejs加载obj文件

    threejs加载并展示obj文件: 研究了一段时间,总结下,废话少说,直接上代码:<!DOCTYPE html> <html lang="en">< ...

  6. threejs加载三维模型

    直接使用three.js编程建模比较麻烦,实际开发的时候往往会借助一些可视化的3D建模工具,比如SolidWorks.Blender.C4D.3Dmax.不同领域的三维软件支持导出的文件有所差异,比如 ...

  7. 【解决方案】如何实现在HTML页面加载完毕后运行某个js

    前景: 今天在开发过程中,发现我js文件里面的方法没有响应,后来发现是js在html中引入的位置不对.我在head中加载了js,导致我js中的document.getElementById方法失效.因 ...

  8. Spring mvc 启动配置文件加载两遍问题

    问题描述 在使用spring mvc 启动的时候,用到了一个在程序启动时加载的配置方法init-method="initLoad",并启动多线程来做数据同步,但是在程序启动之后发现 ...

  9. js控制css 加载,CSS样式表的加载对于DOM解析,渲染,JS执行的阻塞问题

    CSS加载问题 css加载会不会阻塞DOM树的解析? css加载会不会阻塞DOM树的渲染? css加载会不会阻塞后面js语句的执行? css阻塞 h1 { color: red !important ...

最新文章

  1. Android高手速成
  2. mybatisgenerator使用_MyBatis Generator,帮你少写50%代码的自动化工具,你用过吗?
  3. 玩转ceph性能测试---对象存储(一)
  4. OpenGL 法线贴图 切线空间 整理
  5. 苹果手机的隔空投送怎么使用?
  6. Using SQLite database in your Windows 10 apps
  7. 算法-罗马数字转成整数(leetcode13)
  8. MAPGIS67默认打开方式失败
  9. 搭建微信多开服务器,电脑微信多开你都不会?教你简单实现
  10. 如何用GoldWave生成音频的回音效果
  11. 在Unity中实现基于粒子的水模拟(三:混合屏幕)
  12. Matter协议特性解析(一) 支持非Matter协议,私有协议,Matter Bridge技术分析
  13. 小X与神牛(dfs)
  14. 微信小程序授权获取手机号
  15. android 下载txt文件恢复,牛学长安卓数据恢复(UltData - Android)
  16. 华为nova7和nova7pro有什么区别(华为nova7系列配置参数及常见问题)
  17. 《创践——大学生创新创业实任务》 单元测试_ 笔记
  18. SILVACO TCAD 软件使用参考
  19. 使用站长运营工具|百度批量推送工具,助站长快速提升收录
  20. 前端每日实战 2018 年 6 月份项目汇总(共 27 个项目)

热门文章

  1. flutter菜鸟教程!java流程图平行四边形
  2. 团购网站的发展趋势分析
  3. 目标检测YOLOv3
  4. verilog之分频大全
  5. OpenCV在图片上画线和矩形
  6. python 拼音识别_python识别一段由字母组成的字符串是否是拼音
  7. python scripting for arcgis_Python Scripting for ArcGIS Pro
  8. 【2019CSP-J普及组】T4 加工零件
  9. 2022国赛数学建模思路 - 复盘:生成规划模型
  10. 压力测试-Jmeter测试移动APP