Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 14:16

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Nur eine Seite sichtbar
BeitragVerfasst: Mo Jan 16, 2006 16:57 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 16:52
Beiträge: 20
Hallo,

ich versuche ein Quadrat zu erstellen, das sich dreht. Funktioniert auch soweit ganz gut. Nur sehe ich bei der Drehung nur eine Seite des Quadrats. Was mache ich falsch?

Code:
  1.  
  2. unit Main;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, DGLOpenGL, StdCtrls;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormDestroy(Sender: TObject);
  13.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  14.     procedure FormResize(Sender: TObject);
  15.     procedure FormCreate(Sender: TObject);
  16.   private
  17.     { Private-Deklarationen }
  18.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  19.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  20.     procedure SetupGL;
  21. //    procedure Init;
  22.     procedure Render;
  23.     procedure ErrorHandler;
  24.   public
  25.     { Public-Deklarationen }
  26.     DC                                : HDC;  //Handle auf Zeichenfläche
  27.     RC                                : HGLRC;//Rendering Context
  28.  end;
  29.  
  30. CONST
  31.   NearClipping = 1;
  32.   FarClipping  = 100;
  33.  
  34. var
  35.   Form1: TForm1;
  36.   rotx: Integer;
  37.  
  38. implementation
  39.  
  40. {$R *.dfm}
  41.  
  42. procedure TForm1.SetupGL;
  43. begin
  44.   glClearColor(0, 0, 0, 0.0); //Hintergrundfarbe
  45.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  46.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  47. end;
  48.  
  49. procedure TForm1.Render;
  50. begin
  51.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  52.  
  53.   glMatrixMode(GL_PROJECTION);
  54.   glLoadIdentity;
  55.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  56.  
  57.   glTranslatef(0,0,-5);
  58.   glRotatef(rotx,1,0,0);
  59.   glBegin(GL_QUADS);
  60.     glColor3f(1,0,0);  //Rot  
  61.     glVertex3f(1,-1,0);  
  62.     glColor3f(1,1,0);  //Gelb  
  63.     glVertex3f(1,1,0);  
  64.     glColor3f(0,1,0);  //Grün
  65.     glVertex3f(-1,1,0);  
  66.     glColor3f(0,0,1);  //Blau  
  67.     glVertex3f(-1,-1,0);  
  68.   glEnd;
  69.  
  70.   SwapBuffers(DC);
  71. end;
  72.  
  73. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  74. begin
  75.   StartTime:= GetTickCount;
  76.   Render;
  77.   DrawTime:= GetTickCount - StartTime;
  78.   Inc(TimeCount, DrawTime);
  79.   Inc(FrameCount);
  80.  
  81.   if TimeCount >= 1000 then begin
  82.     Frames:= FrameCount;
  83.     TimeCount:= TimeCount - 1000;
  84.     FrameCount:= 0;
  85.     Caption:= InttoStr(Frames) + 'FPS';
  86. //    ErrorHandler;
  87.   end;
  88.  
  89. inc(roty);
  90. if rotx>360 then
  91.   rotx:=rotx - 360;
  92.   sleep(5);
  93.   Done:= false;
  94. end;
  95.  
  96. procedure TForm1.ErrorHandler;
  97. begin
  98.   Form1.Caption := gluErrorString(glGetError);
  99. end;
  100.  
  101. procedure TForm1.FormCreate(Sender: TObject);
  102. begin
  103.   DC:= GetDC(Handle);
  104.   if not InitOpenGL then Application.Terminate;
  105.   RC:= CreateRenderingContext( DC,
  106.                                [opDoubleBuffered],
  107.                                32,
  108.                                24,
  109.                                0,0,0,
  110.                                0);
  111.   ActivateRenderingContext(DC, RC);
  112.   SetupGL;
  113.   rotx := 0;
  114.   Application.OnIdle := IdleHandler;
  115. end;
  116.  
  117. procedure TForm1.FormResize(Sender: TObject);
  118. var tmpBool : Boolean;
  119. begin
  120.   glViewport(0, 0, ClientWidth, ClientHeight);
  121.   glMatrixMode(GL_PROJECTION);
  122.   glLoadIdentity;
  123.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  124.  
  125.   glMatrixMode(GL_MODELVIEW);
  126.   glLoadIdentity;
  127.   IdleHandler(Sender, tmpBool);
  128. end;
  129.  
  130. procedure TForm1.FormDestroy(Sender: TObject);
  131. begin
  132.   DeactivateRenderingContext;
  133.   DestroyRenderingContext(RC);
  134.   ReleaseDC(Handle, DC);
  135. end;
  136.  
  137. end.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 16, 2006 17:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Deaktivier mal Face-Culling: glDisable(GL_CULL_FACE);

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 16, 2006 18:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Willkommen in der Welt des geschwindigkeitsoptimierten OpenGL. 8)

Dein Fehler ist gar kein Fehler, sondern eine Optimierung. Du findest mehr dazu im Wiki unter http://wiki.delphigl.com/index.php/Backface_Culling

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 16, 2006 21:32 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 16:52
Beiträge: 20
Alles klar, das war das Problem. Danke.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]