Показать сообщение отдельно
Старый 13.12.2005, 14:42   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Вот еще один вариант... народ, скажите какой быстрее, а то у меня пашут с одинаковой скоростью...
program MY_3D;
const 
 numpoints=8;
 numlines=12;

var 
 points	:array[1..numpoints,1..5] of integer;
 lines :array[1..numlines, 1..2] of integer;
 SinCosAng :array[0..359, 1..2] of real;
 distance,i     : integer;
 FPS_LastCount,FPS_Count,MS,MSL: integer;
  cx, cy      : integer;
 
 rx, ry, rz    : Integer;
  Srx,Crx,Sry,Cry,Srz,Crz : real;
  ox,tx,ty,tz    : real;
 
procedure CreateAngles;
begin
	for i:=0 to 359 do
 begin
 	SinCosAng[i,1]:=sin(ToRadians(i));
 	SinCosAng[i,2]:=cos(ToRadians(i));
 	SetColor(255, 255, 255);
 	FillRect(0, 0, GetWidth, GetHeight);
 	SetColor(0, 0, 255);
 	DrawText('Loading: '+IntegerToString(i*100/360)+'%', 0, 0);
 	Repaint;
 end;
end;

function NornalizeAngle(DegAngle:integer):integer;
var temp:integer;
begin
	temp:=DegAngle/360;
	NornalizeAngle:=DegAngle-360*temp;
end; 
  
Procedure Rotate3D;
begin
	for i:=1 to numpoints do
 begin
 	//X rotation
 	ty := points[i,2] * SinCosAng[rx,2] - points[i,3] * SinCosAng[rx,1];
 	tz := points[i,2] * SinCosAng[rx,1] + points[i,3] * SinCosAng[rx,2];
 	//Y rotation
 	tx := points[i,1] * SinCosAng[ry,2] - tz * SinCosAng[ry,1];
 	tz := points[i,1] * SinCosAng[ry,1] + tz * SinCosAng[ry,2];
 	//Z rotation
 	ox := tx;
 	tx := tx * SinCosAng[rz,2] - ty * SinCosAng[rz,1];
 	ty := ox * SinCosAng[rz,1] + ty * SinCosAng[rz,2];
 	//Calculate new x and y location with perspective
 	points[i,4] := Trunc(512 * tx / (distance - tz))+cx; //x
 	points[i,5] := Trunc(512 * ty / (distance - tz))+cy; //y
 end;
end; 

begin 
	CreateAngles;
	distance:=100;
	cx:=GetWidth/2;
	cy:=GetHeight/2;
 
 points[1,1]:=5;	points[1,2]:=-5;	points[1,3]:=-5;
 
 points[2,1]:=5;	points[2,2]:=-5;	points[2,3]:=5;
 
 points[3,1]:=5;	points[3,2]:=5;	points[3,3]:=5;
 
 points[4,1]:=5;	points[4,2]:=5;	points[4,3]:=-5;
 
 points[5,1]:=-5;	points[5,2]:=-5;	points[5,3]:=-5;
 
 points[6,1]:=-5;	points[6,2]:=-5;	points[6,3]:=5;
 
 points[7,1]:=-5;	points[7,2]:=5;	points[7,3]:=5;
 
 points[8,1]:=-5;	points[8,2]:=5;	points[8,3]:=-5;
 
 lines[1,1]:=1;	lines[1,2]:=2;
 
 lines[2,1]:=2;	lines[2,2]:=3;
 
 lines[3,1]:=3;	lines[3,2]:=4;
 
 lines[4,1]:=4;	lines[4,2]:=1;
 
 lines[5,1]:=2;	lines[5,2]:=6;
 
 lines[6,1]:=3;	lines[6,2]:=7;
 
 lines[7,1]:=4;	lines[7,2]:=8;
 
 lines[8,1]:=1;	lines[8,2]:=5;
 
 lines[9,1]:=5;	lines[9,2]:=6;
 
 lines[10,1]:=6;	lines[10,2]:=7;
 
 lines[11,1]:=7;	lines[11,2]:=8;
 
 lines[12,1]:=8;	lines[12,2]:=5;

 while true do 
  begin 
 	SetColor(255, 255, 255);
 	FillRect(0, 0, GetWidth, GetHeight); 
  
  rx:= NornalizeAngle(rx+1);
  ry:= NornalizeAngle(2*rx);
  rz:= NornalizeAngle(3*rx);
  
 	Rotate3D;
  
 	SetColor(255, 0, 0); 
 	//Draw3D;
 	for i:=1 to numlines do
 	begin
  DrawLine(points[lines[i,1],4], points[lines[i,1],5], points[lines[i,2],4], points[lines[i,2],5]); 
 	end;
  
 	MS:=GetSecond(GetCurrentTime);
 	If MS<>MSL Then
  begin
  FPS_LastCount:=FPS_Count;
  FPS_Count:=0;
  MSL:=MS;
  end	
 	Else
  FPS_Count:=FPS_Count+1;
  	
  SetColor(0, 0, 255); 
  DrawText('FPS:'+IntegerToString(FPS_LastCount), 0, 0);
  
 	Repaint;
  
 	if GetKeyPressed = KE_KEY1 then distance:=distance-10;
 	if GetKeyPressed = KE_KEY3 then distance:=distance+10;
 	if GetKeyPressed = KE_KEY2 then cy:=cy-2;
 	if GetKeyPressed = KE_KEY4 then cx:=cx-2;
 	if GetKeyPressed = KE_KEY6 then cx:=cx+2;
 	if GetKeyPressed = KE_KEY8 then cy:=cy+2;
  end; 
end.
Мидлет прилагается
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 11.10.2011 в 01:09.
(Offline)
 
Ответить с цитированием