Thema: Delphi 3D Spiel

Einzelnen Beitrag anzeigen

Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#23

Re: 3D Spiel

  Alt 11. Aug 2006, 20:06
@ 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.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat