我有一些非常简单的3D对象(基本上是THREE.Sphere
,它是1-30个其他THREE.Sphere
的父级,具有RGB颜色,没有纹理),可以在某种实时动画中显示。
渲染很快就完成了,但我有一些简单的迭代计算(for-loops
)会扰乱我的显示能力。
渲染本身不是问题,但下一帧顶点的计算是造成痛苦的原因
意思是,当我运行脚本时,我可以看到for-loops
花费了太多时间来计算,然后它就会进入渲染部分,这很快就完成了。
我正在考虑以并行计算的方式处理这个问题 - 运行一个线程(工作者,无论在JS
中调用什么)会计算for-loop
,但我认为考虑到我缺乏计算机graphocs的经验,也许有一种更“模拟”的方式。这意味着处理计算机图形设计这样一个基本问题的更优雅/性能改进/自然的方式。
答案 0 :(得分:0)
这是我用来进行长时间缓慢计算的基本思路,这些计算不会被看门狗定时器捕获并使浏览器或渲染率陷入困境。 基本思想是你使用一个javascript生成器,它允许你在计算过程中屈服,并在以后继续。然后,我在超时链上运行发电机泵。 这种方法的关键是" yield"保存函数状态并返回等待将来调用.next()函数的运算符。 (顺便说一下这个演示代码可能需要重新启动以处理firefoxs前向引用)
//function Chain represents the slow code
function *Chain()
{
for(i=0;i<1000000;i++) //this represents a long slow calculation
{
if(i%100==0) //on occassion, yield
yield;
}
}
console.log("starting chain");
gChain=Chain(); //startup and get the next generator pointer
timeout = setTimeout(function () { ChainStart(); }, 1);
//function ChainStart is a pump that runs the generator using a timeout chain so other threads can run
function ChainStart(){
if(gChain.next().done){
clearTimeout(timeout);
console.log("endingchain");
}
else{
clearTimeout(timeout);
timeout = setTimeout(function () { ChainStart(); }, 1);
}
}