Javascript 只有geometry.elementsEndUpdate会导致内存分配-为什么?

Javascript 只有geometry.elementsEndUpdate会导致内存分配-为什么?,javascript,memory,three.js,Javascript,Memory,Three.js,如果我有一个简单的动画功能 function animate() { geometry.elementsNeedUpdate = true; // allocates memory without geometry.faces[ 0 ].color = ... requestAnimationFrame( animate ); renderer.render( scene, camera ); } 我得到一个内存分配,即使没有改变任何元素。 然后我添加了面部颜色的操纵 functio

如果我有一个简单的动画功能

function animate() {
geometry.elementsNeedUpdate = true;  // allocates memory without geometry.faces[ 0 ].color = ...    
requestAnimationFrame( animate );
renderer.render( scene, camera ); }
我得到一个内存分配,即使没有改变任何元素。 然后我添加了面部颜色的操纵

function animate() {

geometry.elementsNeedUpdate = true;  
// geometry.colorsNeedUpdate = true; // not necessary
// material.needsUpdate = true;      // not necessary
time = clock.getElapsedTime();  
if ( time * 16 % 10 < 5 ) { 
    geometry.faces[ 0 ].color = colorBlue;      
} else {    
    geometry.faces[ 0 ].color = colorRed;       
}
requestAnimationFrame( animate );
renderer.render( scene, camera ); } 
function animate(){
geometry.elementsNedupdate=true;
//geometry.colorsnedupdate=true;//不需要
//material.needsUpdate=true;//不需要
time=clock.getElapsedTime();
如果(时间*16%10<5){
geometry.faces[0]。颜色=colorBlue;
}否则{
geometry.faces[0]。颜色=红色;
}
请求动画帧(动画);
渲染器。渲染(场景、摄影机);}
并且它仍保留在内存分配中

geometry.elementsNeedUpdate=true是更改面颜色所必需的

如何避免内存分配


完整示例可在

中找到,您希望更改对象的面颜色

您可以使用
copy()
setHex()
这样做:

mesh.geometry.faces[ 0 ].color.copy( myColor ); // or .setHex( 0xff0000 )

mesh.geometry.colorsNeedUpdate = true; // required if geometry previously rendered
不要不必要地设置其他
needsUpdate
标志

不要像当前那样指定新的
THREE.Color
对象


three.js r.84

您想更改对象的面颜色

您可以使用
copy()
setHex()
这样做:

mesh.geometry.faces[ 0 ].color.copy( myColor ); // or .setHex( 0xff0000 )

mesh.geometry.colorsNeedUpdate = true; // required if geometry previously rendered
不要不必要地设置其他
needsUpdate
标志

不要像当前那样指定新的
THREE.Color
对象

3.js r.84