|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
[Delphi] Calcolare la posizione 3D di un poligono
Sto cercando di fare un motore 3D con GDI, solo per capire un pò come funziona il 3D.
Ecco il codice che uso: Codice:
type
{Point}
Point3D = record
X, //X coordinate
Y, //Y coordinate
Z: LongInt; //Profondity
end;
{Face}
Face3D = record
Points: array[1..4] of Point3D;
Colour: TColor;
Texture: TPicture;
end;
{Box}
Box3D = record
Faces: array[1..6] of Face3D;
end;
{Position}
Position3D = record
W: Point3D; //Looking point
X, //X coordinate
Y, //Y coordinate
Z: LongInt; //Profondity
end;
procedure DrawBox(const C: TCanvas; const B: Box3D; const pP: Position3D); overload;
var
F, //Faces
P, //Points
pMax, //Z-Point Max
pMin: LongInt; //Z-Point Min
zDiff, //Difference
T, //Temp
S: Extended; //Step
pARR: array of TPoint; //Point array
begin
C.FillRect(C.ClipRect);
for F:=1 to 5 do //Low(B.Faces) to High(B.Faces) do
begin
SetLength(pARR, High(B.Faces[F].Points));
pARR[Low(B.Faces[F].Points)].X:=0;
pARR[Low(B.Faces[F].Points)].Y:=0;
for P:=Low(B.Faces[F].Points) to High(B.Faces[F].Points) do
begin
zDiff:=(pP.Z - B.Faces[F].Points[P].Z);
S:=GetLowerThan(zDiff, 1);
//S:=1;
T:=(B.Faces[F].Points[P].X - pP.X);
T:=(T + zDiff);
T:=(T * S);
pARR[P-1].X:=B.Faces[F].Points[P].X;
pARR[P-1].X:=Trunc(T); //mod fWidth);
T:=(B.Faces[F].Points[P].Y - pP.Y);
T:=(T + zDiff);
T:=(T * S);
pARR[P-1].Y:=B.Faces[F].Points[P].Y;
pARR[P-1].Y:=Trunc(T); //mod fHeight);
end;
//SetDCBrushColor(DC, B.Faces[F].Colour);
C.Polygon(pARR);
(* C.Brush.Color:=0;
C.FloodFill(
(pARR[Low(B.Faces[F].Points)].X - 1),
(pARR[Low(B.Faces[F].Points)].Y - 1),
B.Faces[F].Colour,
fsBorder
); *)
{FloodFill(DC,
(pARR[Low(B.Faces[F].Points)].X + 1),
(pARR[Low(B.Faces[F].Points)].Y + 1),
B.Faces[F].Colour
);}
end;
end;
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non mi sembra ilc aso di rimettersi ad inventare l'acqua calda...
OpenGL gestisce perfettamente le matrici di traslazione e rotazione per posizionare gli oggetti nello spazio 3D... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
vai qua
http://homepages.borland.com/efg2lab/index.html alla sezione grafica. Devi imparare come si trasformano le coord reali in coordinate device. Comunque una volta capito il meccanismo teorico,dovresti usare un componente. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
http://www.makegames.com/3drotation/
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Vi ringrazio infinitamente, i link sono utilissimi. Cmq, cionci, semplicemente (come avevo già scritto) mi serve per capire come funzionano i motori 3D... le mie intenzioni sono ben distanti dalla creazione di un motore 3D...
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:17.



















