だから、私はこの単純な 4dof ボクセル アルゴリズムを JavaScript で作成しました。私は自分自身を非常に誇りに思っていますが、デバッグするのに十分な時間がなく、数日分の睡眠を失いましたが、実行が比較的遅いことに気付きました。 .
現在、明らかな %-scaling と setInterval ループが速度を低下させていますが、わずか 100 個のボクセルで 20 FPS 未満しか得られず、そのほとんどは画面に表示されていません。
次のコードは申し訳ありませんが、これは私の原始的な小さなゲーム エンジンに適合しているため、独自のページでは実行されませんが、この URL (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 の増加です。
誰かがこれをもっと速く実行する方法を持っていれば、本当に私の一日が楽しくなります.