DelphiX a OpenGL

DelphiX a OpenGL

Tutaj, krótko i zwięźle :P
W DelphiX rysujemy w trójwymarze podobnie jak w OpenGL'u, czyli określamy w przestrzeni co ma być rysowane a potem już tylko używamy instrukcji flip i już :]
np. kod w OpenGL:
glBegin(GL_QUADS);
//przod
glVertex(0, 1, 0);
glVertex(0, 0, 0);
glVertex(1, 0, 0);
glVertex(1, 1, 0);
//tyl
glVertex(0, 1, 1);
glVertex(0, 0, 1);
glVertex(1, 0, 1);
glVertex(1, 1, 1);
//lewa
glVertex(1, 1, 0);
glVertex(1, 1, 1);
glVertex(1, 0, 1);
glVertex(1, 0, 0);
//prawa
glVertex(0, 1, 0);
glVertex(0, 1, 1);
glVertex(0, 0, 1);
glVertex(0, 0, 0);
//gora
glVertex(0, 1, 0);
glVertex(0, 1, 1);
glVertex(1, 1, 1);
glVertex(1, 1, 0);
//dol
glVertex(0, 0, 0);
glVertex(0, 0, 1);
glVertex(1, 0, 1);
glVertex(1, 0, 0);
glEnd();

Możemy przetłumaczyć na DelphiX: (kod źródłowy pochodzi z: DelphiX\Samples\d3dim\Cube)
//przod
g_pCubeVertices[0] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0, 1.0,-1.0), n0, 0.0, 0.0 );
g_pCubeVertices[1] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0, 1.0,-1.0), n0, 1.0, 0.0 );
g_pCubeVertices[2] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0,-1.0,-1.0), n0, 0.0, 1.0 );
g_pCubeVertices[3] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0,-1.0,-1.0), n0, 1.0, 1.0 );

// tyl
g_pCubeVertices[4] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0, 1.0, 1.0), n1, 1.0, 0.0 );
g_pCubeVertices[5] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0,-1.0, 1.0), n1, 1.0, 1.0 );
g_pCubeVertices[6] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0, 1.0, 1.0), n1, 0.0, 0.0 );
g_pCubeVertices[7] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0,-1.0, 1.0), n1, 0.0, 1.0 );

// gora
g_pCubeVertices[8] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0, 1.0, 1.0), n2, 0.0, 0.0 );
g_pCubeVertices[9] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0, 1.0, 1.0), n2, 1.0, 0.0 );
g_pCubeVertices[10] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0, 1.0,-1.0), n2, 0.0, 1.0 );
g_pCubeVertices[11] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0, 1.0,-1.0), n2, 1.0, 1.0 );

// dol
g_pCubeVertices[12] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0,-1.0, 1.0), n3, 0.0, 0.0 );
g_pCubeVertices[13] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0,-1.0,-1.0), n3, 0.0, 1.0 );
g_pCubeVertices[14] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0,-1.0, 1.0), n3, 1.0, 0.0 );
g_pCubeVertices[15] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0,-1.0,-1.0), n3, 1.0, 1.0 );

// prawo
g_pCubeVertices[16] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0, 1.0,-1.0), n4, 0.0, 0.0 );
g_pCubeVertices[17] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0, 1.0, 1.0), n4, 1.0, 0.0 );
g_pCubeVertices[18] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0,-1.0,-1.0), n4, 0.0, 1.0 );
g_pCubeVertices[19] := MakeD3DVERTEX( MakeD3DVECTOR( 1.0,-1.0, 1.0), n4, 1.0, 1.0 );

// lewo
g_pCubeVertices[20] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0, 1.0,-1.0), n5, 1.0, 0.0 );
g_pCubeVertices[21] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0,-1.0,-1.0), n5, 1.0, 1.0 );
g_pCubeVertices[22] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0, 1.0, 1.0), n5, 0.0, 0.0 );
g_pCubeVertices[23] := MakeD3DVERTEX( MakeD3DVECTOR(-1.0,-1.0, 1.0), n5, 0.0, 1.0 );

Blebleble :P
Oba przypadki rysują (no jak tak wkleimy sam kod to nie :) )sześcian (no chyba że coś pokićkałem i w DelphiX nie rysuje sześcianu)
Wiem co pomyślicie ;) w OpenGl'u mniej pisania więc wygodniejszy :P

Wniosek jest taki, że: Pierw rysujemy coś w przestrzeni nie widząc tego (kreatywne myślenie) a następnie jedną procedurką (może więcej) malujemy to na ekranie.

A morał: Do 3D najlepszy OpenGL :]