three.js新手入门教程( 七 )


控制渲染顺序
1.设置
renderer.sortObjects=false;
这样 , 物体的渲染顺序将会由他们添加到场景中的顺序所决定 。
2.设置
renderer.sortObjects=true;
并且给特定的物体设置object.renderOrder指定它的渲染顺序 。 默认renderOrder=0;
3.遍历设置
material1.depthWrite=false;
material2.depthWrite=false;
辅助
坐标轴AxesHelper
用于简单模拟3个坐标轴的对象.
红色代表X轴.绿色代表Y轴.蓝色代表Z轴.
varaxesHelper=newTHREE.AxesHelper(length);
scene.add(axesHelper);
length(可选的)表示代表轴的线段长度.默认为1 。
性能检测stats
检测当前场景的渲染帧率和显存占用情况;
stats=newStats();
stats.domElement.style.position='absolute';
stats.domElement.style.top='0px';
stats.domElement.style.left='0px';document.body.(_stats.domElement);
使用时 , 需要添加入渲染函数内:
functionAnimate(){
requestAnimationFrame(Animate);
Render();
}
functionRender(){
stats.update();
render.render(scene,camera);
}
动画
动画混合器AnimationMixer
动画混合器是用于场景中特定对象的动画的播放器 。 当场景中的多个对象独立动画时 , 每个对象都可以使用同一个动画混合器 。
AnimationMixer(Object3D)
Object3D为混合器播放的动画所属的对象 。
属性
.time:Number全局的混合器时间(单位秒;混合器创建的时刻记作0时刻)
.timeScale:Number全局时间(mixertime)的比例因子
说明:将混合器的时间比例设为0/1 , 可以暂停/取消暂停由该混合器控制的所有动作 。
方法
clipAction(clip:AnimationClip,optionalRoot:Object3D):AnimationAction//返回传入AnimationAction
Animationaction=mixer.clipAction(clip);
clip是动画剪辑(AnimationClip)对象或者动画剪辑的名称(导入的模型的动作信息保存在object.animations[]数组内) 。 根对象Object3D可选 , 默认值为混合器的默认根对象 。
如果不存在符合传入的剪辑和根对象这两个参数的动作,该方法将会创建一个 。
AnimationActions用来调度存储在AnimationClips中的动画 。 动画剪辑AnimationClip是一个可重用的关键帧轨道集 , 它代表动画 。
AnimationAction的大多数方法都可以链式调用 。
点击交互
原理
浏览器是一个2D视口 , 在里面显示threejs的内容是3D场景 , 从浏览器观测3D场景时 , 眼睛就相当于是threejs内的摄像机点 , 鼠标在屏幕的点击位置是另一个点 。 这两个点会在threejs内连接成一条直线raycaster , 直线穿过的threejs内的物体就是鼠标所点击的物体 。
实现
Raycaster(origin:Vector3,direction:Vector3,near:Float,far:Float)
origin——光线投射的原点向量 。
direction——向射线提供方向的方向向量 , 应当被标准化 。
near——返回的所有结果比near远 。 near不能为负值 , 其默认值为0 。
far——返回的所有结果都比far近 。 far不能小于near , 其默认值为Infinity(正无穷) 。
方法
.setFromCamera(coords:Vector2,camera:Camera):null
coords——在标准化设备坐标中鼠标的二维坐标 。
camera——射线所来源的摄像机 。
使用一个新的原点和方向来更新射线 。
.intersectObjects(objects:Array,recursive:Boolean,optionalTarget:Array):Array
objects——检测和射线相交的一组物体 。
recursive——若为true , 则同时也会检测所有物体的后代 。 否则将只会检测对象本身的相交部分 。 默认值为false 。
optionalTarget——(可选)(可选)设置结果的目标数组 。 如果不设置这个值 , 则一个新的Array会被实例化;如果设置了这个值 , 则在每次调用之前必须清空这个数组(例如:array.length=0;) 。