@ Cöster
NEIN,
Wenn ich das so machen würde wärs heftig.
1. Speichere ich nur die Opbjecte diese sind alle in einem eindimensionalen Array gespeichert.
Jedes Element hat eine Variable Position. Für alle neugierigen hier die Basisklasse von der alle Objecte im spiel abgeleitet wurden.
Delphi-Quellcode:
TBalancedObject = Class
private
FTexture: GLuint; // Pointer auf die Graphik unseres Steines.
Fposition: TVector3f;
FSchwerpunkt: TVector3f;
Fpoints: Array Of TVector3f;
Froty: Integer;
Function FgetRotationY: integer;
Procedure Setschwerpunkt;
public
Property RotationY: integer read FgetRotationY;
Property Texture: gluint read Ftexture;
Function Position: TVector3f;
Constructor create(Pointcount: Integer);
Destructor destroy; override;
Procedure RotateY(Angle: Integer); virtual;
End;
Und alles was zum Zeichnen benutzt wird macht
OpenGL für mich.
D.h. seit dem Frustumculling nicht mehr alles, aber fast.( für einen Anfänger macht man alles und versteht irgendwann wie's geht und baut dann das Frustumculling ein, oder so)
was du mit Blickwinkel und gruscht meinst bruache ich nicht machen.
OpenGL ist genau wie Form1.canvas
Es gibt Zeichenroutinen die benutze ich, nur eben das alles 3D ist.
Den ganzen Optischen gruscht macht dann das
OpenGL für mich.
Das Rendern eines Rechtecks passiert bei mir im Spiel z.b. so
Delphi-Quellcode:
Procedure DrawQuadPolygon(LeftTop, RightTop, RightBottom, LeftBottom: TVector3f; Texture: gluint = 0);
Begin
// Einbinden der Graphik
If Texture <> 0 Then
glBindTexture(GL_TEXTURE_2D, Texture);
// Öffnen des Quad Modus
glbegin(GL_QUADS);
// Zeichnen Links unten
glTexCoord2f(0.0, 0.0);
glVertex3f(LeftBottom.X, LeftBottom.y, LeftBottom.z);
// Zeichnen Rechts unten
glTexCoord2f(1.0, 0.0);
glVertex3f(RightBottom.X, RightBottom.y, RightBottom.z);
// Zeichnen Rechts Oben
glTexCoord2f(1.0, 1.0);
glVertex3f(RightTop.X, RightTop.y, RightTop.z);
// Zeichnen Links Oben
glTexCoord2f(0.0, 1.0);
glVertex3f(LeftTop.X, LeftTop.y, LeftTop.z);
// Beenden des Quad Modus
glend;
End;
Wenn man es ganz scharf betrachtet kann man die Procedure DrawQuadPolygon schon als Engine Bezeichnen.