Форум: "Игры";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизПроекция точки Найти похожие ветки
← →
Bizon's © (2004-06-27 11:49) [0]Как можно в DelphiX или DirectX спроектировать отдельную точку на экран, тоесть преобразовать с 3D на экран (с учетом разположения камеры, матрицы проекции,...). И как узнать видемый ли это пиксель или нет.
← →
X-Disa (2004-06-28 10:35) [1]
T3DPoint=record
X,Y,Z:Real;
End; //Трехмерная точка
TCamera = class //Описание камеры, ниже ее процедуры
XPos, YPos,ZPos: Real;
XAngle,YAngle:real;
Zoom:real;
procedure Rotate(DX,DY:real);
procedure RotateTo(X,Y:real);
Procedure Move(DX,DY,DZ:real);
Procedure MoveTo(X,Y,Z:real);
Procedure Initialize;
end;
Procedure tCamera.Rotate(DX,DY:real);
Begin
DX:=XAngle+Dx;
DY:=YAngle+DY;
XAngle:=DX;
YAngle:=DY;
End;
Procedure tCamera.RotateTo(X,Y:real);
Begin
If X>360 then X:=x-360;
If X<0 then X:=360-X;
If Y>360 then X:=Y-360;
If Y<0 then Y:=360-Y;
XAngle:=X;
YAngle:=Y;
End;
Procedure tCamera.Initialize;
Begin
XPos:=0;
YPos:=0;
ZPos:=0;
XAngle:=0;
YAngle:=0;
Zoom:=1;
end;
Procedure TCamera.Move(DX,DY,DZ:real);
Begin
XPos:=XPos+DX;
YPos:=YPos+DY;
ZPos:=ZPos+DZ;
End;
Procedure TCamera.MoveTo(X,Y,Z:real);
Begin
XPos:=X;
YPos:=Y;
ZPos:=Z;
End;
//Функция проецирования
Function Point3DToPoint(P3D:T3DPoint;FRC:TCamera;Cent:TPoint):TPoint; //Cent - центр экрана
Begin
Result.X:=Cent.X+ round( FRC.Zoom* ( (P3D.X-FRC.XPos)*cos(FRC.XAngle)+(P3D.Y-FRC.YPos)*sin(FRC.XAngle) ));
Result.Y:=Cent.Y + round( FRC.Zoom * (((P3D.y-FRC.YPos)*cos(FRC.XAngle)-(P3D.x-FRC.XPos)*sin(FRC.XAngle))*sin(FRC.YAngle)-cos(FRC.YAngle)*(P3D.z-FRC.ZPos)));
End;
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c