gpt4 book ai didi

javascript - 如何从我的 [原始] 体素算法中挤出额外的 10 FPS?

转载 作者:行者123 更新时间:2023-11-30 13:30:57 26 4
gpt4 key购买 nike

所以,我用 JavaScript 编写了这个简单的 4dof 体素算法,我为自己感到非常自豪,但我没有足够的时间进行调试,而且我已经失去了好几天的 sleep ,但我注意到它是运行速度相对较慢。

现在,有明显的 %-scaling 和 setInterval 循环减慢了它的速度,但我只在 100 个体素上得到了不到 20 FPS,其中大部分甚至不在屏幕上。

请原谅下面的代码,它适用于我原始的小游戏引擎,所以它不会在自己的页面上运行,但你可以在这个网址(http://nextgengame.webs.com/fun/sandbox.htm)。

world=new Array();

for(i=0;i<100;i++){
world[i]=[Math.random()*50-25,-3,Math.random()*50-25,['#FFFFFF','#FF0000','#00FF00','#0000FF','#FFFF33'][Math.round(Math.random()*4)]];
}

r=0;
camx=0;
camy=0;
camz=0;

fps=0;
frames=0;

window.setInterval(function(){
fps=frames;
frames=0;
},1000);

window.setInterval(function(){;
r+=0.02;
if(r>Math.PI*2)r=0;

points=[];

for(i=0;i<world.length;i++){;
u=world[i];
x1=u[0]-camx;
z1=u[2]-camz;
z2=x1*Math.sin(r)+z1*Math.cos(r);
z3=Math.round(z2);
if(!points[z3])points[z3]=[];
points[z3][points[z3].length]=[x1*Math.cos(r)-z1*Math.sin(r),u[1]-camy,z2,u[3]];
};

for(z=points.length-1;z>=0;z--){;
t=points[z];
if(t){;
for(i=0;i<t.length;i++){;
u=t[i];
z1=u[2];
z2=0-z1;
s=69/z1;
h=s*-0.5+50;
drawBox(u[0]/z1*50+h,u[1]/z2*50+h,s,s,u[3]);
};
};
};
frames+=1;
centertext(50,0,String(fps),'#FFFFFF');
sync();
},33);

这不足以制作风景或任何东西,我希望至少提高 10 FPS。

这是没有旋转的样子:

world=[];
points=[];
for(i=0;i<100;i++){
world[i]=[Math.random()*50-25,-3,Math.random()*50-25,['#FFFFFF','#FF0000','#00FF00','#0000FF','#FFFF33'][Math.round(Math.random()*4)]];
}

r=0;
camx=0;
camy=0;
camz=0;

fps=0;
frames=0;

window.setInterval(function(){
fps=frames;
frames=0;
},1000);


for(i=0;i<world.length;i++){;
u=world[i];
z3=Math.round(u[2]);
if(!points[z3])points[z3]=[];
points[z3][points[z3].length]=u;
};

window.setInterval(function(){;

for(z=points.length-1;z>=0;z--){;
t=points[z];
if(t){;
for(i=0;i<t.length;i++){;
u=t[i];
z1=u[2];
z2=0-z1;
s=69/z1;
h=s*-0.5+50;
drawBox(u[0]/z1*50+h,u[1]/z2*50+h,s,s,u[3]);
};
};
};
frames+=1;
centertext(50,0,String(fps),'#FFFFFF');
sync();
},33);

您相信吗,它仍然以大致相同的速度运行!最多增加 4 FPS!

如果有人能以更快的速度运行它,那真的会让我很高兴。

最佳答案

一个显而易见的事情是为你的辐射值预先计算值,这意味着你将有两个阵列,正弦和余弦以 0.02 为增量,最多 2 x pi(这是一个完整的圆)。

这些计算对引擎来说真的很繁重。

此外,您正在为动画使用 setInterval,但是以 33 毫秒为间隔,这使您最多可以达到 30 fps。 setInterval 上的时间也不是一个精确的测量值,因为它可能会被其他因素(其他计时器等)延迟,所以也许您最好尝试尽快运行它们并将动画调整为 fps反而?

并且使用一个低值的 setTimeout 只是为了在帧之间释放引擎以执行其他任务,而不是耗尽 CPU。

关于javascript - 如何从我的 [原始] 体素算法中挤出额外的 10 FPS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com