基础更新
什么时候进行更新:
- 创建物体时
var object = new THREE.Object3D;
scene.add( object );
- 创建子物体时
var object1 = new THREE.Object3D;
var object2 = new THREE.Object3D;
object1.add( object2 );
scene.add( object1 );
- 如何强制不更新
当物体为惰性更新, 则在参数中设置matrixAutoUpdate为false, 并且如果必须更新则需要调用updateMatrix Api
object.matrixAutoUpdate = false;
object.updateMatrix();
线条更新
必须设置位置点更新为真, 否则不更新位置点只在结束后改变颜色, 我想这是因为position这个属性并非来自api, 而是自定义的函数, 这是需要强调更新的
line.geometry.attributes.position.needsUpdate = true;
Geometry
-
BufferGeometry 缓存结构
用于存储点, 面, 法线, 颜色, uv值, 以及任何自定义参数, 需要注意- buffer长度是固定的, 可以多创建不用那么多, 但是不可以不够用去添加长度
-
Geometry 结构
- 开启对指定功能更新渲染是单次的, update之后就会被关闭, 如果想再次渲染需要再进行设置, 这个在线条自定义更新中的position是一样的
- Geometry的这些属性并不适用在BufferGeometry中
var geometry = new THREE.Geometry();
geometry.verticesNeedUpdate = true;
geometry.elementsNeedUpdate = true;
geometry.morphTargetsNeedUpdate = true;
geometry.uvsNeedUpdate = true;
geometry.normalsNeedUpdate = true;
geometry.colorsNeedUpdate = true;
geometry.tangentsNeedUpdate = true;
- 在r66版本之前需要增加这项来支持更新, 新版本不需要
geometry.dynamic = true;
Material
包括颜色, 纹理, 透明度等随时可以改变
阴影烘焙在法线中, 需要上面这句
geometry.normalsNeedUpdate = true;
不能时时改变的有:
- 符合类型中的数值和类型
- 光源中的数值和类型
- 是否存在纹理/雾/定点色/skinning皮/morphing变形/阴影贴图/透明测试
上述如果有变动请重置此参数
material.needsUpdate = true
Texture
纹理, 包括图像, 画布, 视频或者纹理数据等
纹理需要更新时需要调用如下代码
texture.needsUpdate = true;
camera
摄像机的位置和对准对象是可以自动更新的
如果需要更改fov, aspect, near, far这些参数, 那么需要这样更新
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();