Тема: 3D куб!
Показать сообщение отдельно
Старый 28.12.2005, 14:03   #5
jimon
 
Сообщений: n/a
вот вчера портировал на midletpascal
вышло конешно тупо - портирование прямое : тоесть то что нереализовано тут, просто навязавается

делал под разрешение 128*128
на мобилке 6 фпс ! :o

алго в атаче

код здесь
program example_3d;

var vx,vy,vz,d:real;
 * *run:boolean;
 * *speed:real;
nx,ny,nx2,ny2:integer;


procedure b3d(o,x3d,y3d,z3d,vx,vy,vz,distance:real);

 * *var ty,tz,tx,ox:real;
 * *begin


 * *ty := ((y3d * Cos(vx)) - (z3d * Sin(vx)));
 * *tz := ((y3d * Sin(vx)) + (z3d * Cos(vx)));

 * *tx := ((x3d * Cos(vy)) - (tz * Sin(vy)));
 * *tz := ((x3d * Sin(vy)) + (tz * Cos(vy)));

 * *ox := tx;

 * *tx := ((tx * Cos(vz)) - (ty * Sin(vz)));
 * *ty := ((ox * Sin(vz)) + (ty * Cos(vz)));


if o=0 then
begin
 * *nx := Trunc(512 * (tx) / (distance - (tz)) + 320);
 * *ny := Trunc(240 - (512 * ty) / (distance - (tz)));
end;

if o=1 then
begin
 * *nx2 := Trunc(512 * (tx) / (distance - (tz)) + 320);
 * *ny2 := Trunc(240 - (512 * ty) / (distance - (tz)));
end;


end;

procedure line3d(zl1x,zl1y,zl1z,zl2x,zl2y,zl2z,vx,vy,vz,d:real);
var m1,m2:integer;
 * begin
m1:=280;
m2:=200;

 * b3d(0,zl1x,zl1y,zl1z,vx,vy,vz,d);
 * b3d(1,zl2x,zl2y,zl2z,vx,vy,vz,d);



 * drawline(nx-m1,ny-m2,nx2-m1,ny2-m2);
 *

end;

procedure cube(vx,vy,vz,d:real);
begin

 * line3d(0,0,0,1,0,0,vx,vy,vz,d);
 * line3d(0,0,0,0,1,0,vx,vy,vz,d);
 * line3d(0,0,0,0,0,1,vx,vy,vz,d);

 * line3d(1,0,0,1,1,0,vx,vy,vz,d);
 * line3d(1,0,0,1,0,1,vx,vy,vz,d);

 * line3d(0,0,1,1,0,1,vx,vy,vz,d);
 * line3d(0,0,1,0,1,1,vx,vy,vz,d);

 * line3d(0,1,1,1,1,1,vx,vy,vz,d);
 * line3d(1,1,0,1,1,1,vx,vy,vz,d);

 * line3d(0,1,0,1,1,0,vx,vy,vz,d);
 * line3d(0,1,0,0,1,1,vx,vy,vz,d);

 * line3d(1,0,1,1,1,1,vx,vy,vz,d);

end;


begin

 * d:=20;
 * 
 * speed:=0.04;

 * vx:=0.2;
 * vy:=0.5;
 * vz:=0;

 * run:=true;
 * 
 * nx:=0;
 * ny:=0;
 * nx2:=0;
 * ny2:=0;

 * while run=true do
 * begin

 * if getKeyPressed = KE_KEY8 then vy:=vy+speed;

 * if getKeyPressed = KE_KEY2 then vy:=vy-speed;
 * 
 * if getKeyPressed = KE_KEY4 then vx:=vx-speed;
 * * 
 * if getKeyPressed = KE_KEY6 then vx:=vx+speed;

 * if getKeyPressed = KE_KEY0 then run:=false;

setcolor(255,255,255);
 *fillRect(0, 0, 200, 200); 
setcolor(0,0,0);

 * cube(vx,vy,vz,d);

 * repaint; 
 * 
 *
 * end;
end.
неругатся на меня

to diplomat : ПОСМОТРИ НА ЕТО думаю сразуже признаеш украинцев как программистов !
 
Ответить с цитированием