博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Three.js构造一个简单的房间
阅读量:4331 次
发布时间:2019-06-06

本文共 2660 字,大约阅读时间需要 8 分钟。

  主要研究three.js在3D场景中基本使用:画一个简单的房子、房子上画门和玻璃、房间内放一个床、定义鼠标事件可以移动场景、动画的使用等。

1.Three.js画的一个简单的房子,模拟地板以及四堵墙 

准备素材:

3.jpg模拟地板

 

4.jpg模拟墙

 

 

代码:

    myHouse                    

结果:

 

 2.增加鼠标事件和键盘事件控制摄像头进而模拟在房间内行走

  控制器的使用,主要的控制器如下:

 

  • 轨迹球控制器的使用:(使用鼠标改变场景以及在界面实时显示相机的位置)

可用的鼠标事件如下:

 

(1)引入相关JS:

(2)创建控制器并绑定到相机上

//鼠标控制动画相关组件    var trackballControls, clock;    function initTrackballControls(){        clock = new THREE.Clock();        trackballControls = new THREE.TrackballControls(camera);        trackballControls.rotateSpeed = 1.0;        trackballControls.zoomSpeed = 1.0;        trackballControls.panSpeed = 1.0;        //        trackballControls.noZoom=false;        //        trackballControls.noPan=false;        trackballControls.staticMoving = true;        //        trackballControls.dynamicDampingFactor=0.3;    }

(3)摄像机的位置更新在render循环中完成

function render() {        requestAnimationFrame(render);        webGLRenderer.render(scene, camera);        //鼠标事件        var delta = clock.getDelta();        trackballControls.update(delta);        logCameraPosition();        if(stats){            stats.update();        }    }    function logCameraPosition(){        var logInfo = "[info]: x - " + camera.position.x + " ;y - " + camera.position.y + " ;z - " + camera.position.z;        $("#logInfo").html(logInfo);    }

如果禁用鼠标缩放可以将noZoom设为true。 

 

代码如下:

    myHouse                            

效果:

 

  • 轨道控制器(支持鼠标和键盘事件)

其支持的事件如下:

(1)使用的类库是:

(2)初始化control即可

function initOrbitControls(){        controls = new THREE.OrbitControls(camera,webGLRenderer.domElement);        controls.minDistance = 1;        controls.maxDistance = 5000;    }

代码如下:

myHouse

 

 

3.场景中添加一个床 (六面体),并且自定义鼠标点击事件悬浮在床上的时候弹出框

   这个都采用的是git上封装过的JS库来实现的,参考git地址:

  three.js的事件机制用到的是onEvent,参考:

  也通过tags、userData、name进行数据的绑定。

 

代码如下:

myHouse

结果:

4.  在墙上挖一个玻璃

  在墙上挖玻璃需要用到ThreeBSP.js,实际上就是求两个物体的差集之后进行添加;如果需要挖一个门,需要做的操作是:先在墙上求墙和门的差集得到一个mesh对象添加到scene中,并将门也添加到scene即可实现。

代码如下:

myHouse

结果:

5.Tween动画实现旋转床

  tween.js是一款可生成平滑动画效果的js动画库。你只需要告诉tween你想修改什么值,以及动画结束时它的最终值是什么,动画花费多少时间等信息,tween引擎就可以计算从开始动画点到结束动画点之间值,来产生平滑的动画效果。  其详细用法参考: 

 代码:

myHouse

结果:

  床会一直旋转。。。

 

6.   增加一个玻璃天窗,完成最终的房子 

  旋转床、鼠标和键盘对场景缩放。

myHouse

结果:

 

git源码地址: 

 

总结:

  一般物体的y取的是高度是1/2;

  旋转角度的单位是Math.PI (乘以对应的角度,1就是180度,0.5就是90度)

 

转载于:https://www.cnblogs.com/qlqwjy/p/10969445.html

你可能感兴趣的文章
用CSS3实现无限循环的无缝滚动
查看>>
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。...
查看>>
对象返回规范的url的两种方式的两种方式
查看>>
索引的利与弊
查看>>
【U3D】播放器设置(PlayerSettings)
查看>>
AngularJS过滤器
查看>>
用filter过滤数组对象,并统计过滤的项目
查看>>
RabbitMQ在Windows环境下的安装与使用
查看>>
架构、框架、模式和平台的区别
查看>>
selenium 服务器端运行命令
查看>>
selenium支付高版本的FireFox
查看>>
在服务器上排除问题的头五分钟
查看>>
win7下安装ubuntu14.04lts 双系统
查看>>
转multicast vs broadcast
查看>>
soapUI学习笔记---断言的小使用
查看>>
第二次作业
查看>>
WinCE7的Bootpart参考
查看>>
安装配置Django开发环境(Eclipse + Pydev)
查看>>
[蓝桥杯] 生日蜡烛
查看>>
Spring常用注解
查看>>