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

Aktuelle Zeit: Di Jul 15, 2025 21:02

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2D Tutorial aber trotzdem kein Plan!
BeitragVerfasst: So Feb 12, 2006 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jan 24, 2006 16:26
Beiträge: 25
hi,

ich habe mir das 2D Tutorial durchgelesen aber ich kann einfach nicht zeichen bei mir. Woran liegt es?Nicht richtig eingestellt?

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


thx im Voraus!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 23:43 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Wieso? Siehst du nicht den Pixel den du mit deiner Routine gezeichnet hast?
In einer Ecke solltest du einen bunten (welche Farbe OGL wohl nimmt...) Pixel sehen.
Mehr zeichnest du aber auch nicht.
Wenn er nicht schon durch glEnable(GL_CULL_FACE); ausgeblendet wird, was ich jetzt nicht überprüft habe.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 00:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jan 24, 2006 16:26
Beiträge: 25
Heh,

danke für deine schnelle Antwort! Ich müsste das Quad erstmal viel größer zeichnen und dann noch glDisable(GL_CULL_FACE) an machen.

danke für die Hilfe!!! :D :D :D :D :D :D :D :D :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 00:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
i0n0s hat geschrieben:
Wenn er nicht schon durch glEnable(GL_CULL_FACE); ausgeblendet wird, was ich jetzt nicht überprüft habe.


Was i0n0s damit meint ist, das in OGL die Rückseite von Flächen nicht angezeigt werden wenn GL_CULL_FACE enabled ist. OGL bestimmt Vorder- und Rückseite anhand der Richtung in der du die Vertices gesetzt hast. In deinem Fall:

juKx hat geschrieben:
glColor3f(1, 0, 0); glVertex3f(1, 1, 0);
glColor3f(0, 1, 0); glVertex3f(1, 2, 0);
glColor3f(0, 0, 1); glVertex3f(2, 2, 0);
glColor3f(1, 1, 0); glVertex3f(2, 1, 0);


zeichnest du im uhrzeigersinn. OGL nimmt aber an, dass entgegen des Uhrzeigersinnes gezeichnet wird. Demnach wird deine "Vorderseite" einfach nicht angezeigt, weil es für OGL eine Rückseite ist ;)

-Malax

Edit: Da du vor meinem Absenden schon geantwortet hast, füge ich gerade noch hinzu, dass du lieber die Zeichenrichtung OGL konform halten solltest, anstatt einfach das Culling zu deaktivieren.


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 » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]