所以,我用 JavaScript 做了这个简单的 4dof 体素算法,我为自己感到很自豪,但是我没有足够的时间来调试,我已经失去了几天的睡眠,但是我注意到它运行得相对缓慢.
现在,有明显的 %-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!
如果有人能更快地运行它,那真的会让我很开心。