我刚开始使用three.js。我使用在three.js 主网站上找到的代码片段组装了一个测试。
根据我制作的方程式,我有一堆几何图形(球体)代表在循环内改变位置的粒子。我试图通过这种代码渲染每次迭代:
function simulate() {
for (var j = 0 ; j < Nb ; j++ ) {
// update the geometries positions
...
render();
}
}
但渲染没有完成,而是在经过所有迭代后执行,当进入animate
函数时,调用后simulate
function animate() {
render();
requestAnimationFrame( animate );
}
实际上,如果我在我的 chrome 浏览器的 javascript 控制台中一步一步地进行渲染,就会发生这种情况。
所以我试图改变我的代码,这样我就可以requestAnimationFrame
在我的循环中使用,这样:
function simulate() {
for (var j = 0 ; j < Nb ; j++ ) {
this.internalRenderingLoop = function() {
// update the objects shapes and locations
...
render();
requestAnimationFrame( this.internalRenderingLoop );
}
}
}
但它也没有工作。我显然也有两个电话之间的冲突requestAnimationFrame
导致Uncaught Error: TYPE_MISMATCH_ERR: DOM Exception 17
所以问题是:有没有办法在我的simulate
函数的每次迭代中强制渲染,或者我是否需要重构我的代码,以便每次更新几何位置的调用都在animate
orrender
函数中进行?