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

Aktuelle Zeit: Di Jul 15, 2025 20:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit glTranslatef
BeitragVerfasst: Sa Aug 30, 2003 22:39 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
Erstmal ein Hallo an alle..

Ich bin gerade mal wieder dabei einen Einstieg in OpenGL zu finden und wollte mir jetzt eine simples Grundprojekt erstellen das ich erstmal immer benutzen kann (also initialiesiren usw).

Einiges hab ich aus dem beginner tuts hier von der seite und andere sachen aus dem Der Entwickler heft (die hatten mal ne 2 teilige einführung).

Normalerweise klappt auch alles bzw. ich finde irgenwann nen passenden hinweis oder so auf meinen fehler aber im mom bin ich fast am abdrehen.

Mein Problem ist das ich einfach nur nen simples viereck zeichnen will und das NICHT angezeigt wird wenn ich vorher mit glTranslate die kamera setze.
Ohne glTranslate funktioniert es allerdings.

Ich hoffe, das mir jemand weiterhelfen kann.

Code:
  1.  
  2. unit glMain;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OpenGL12,
  8.   AppEvnts, ExtCtrls;
  9.  
  10. type
  11.   TglForm = class(TForm)
  12.     ApplicationEvents1: TApplicationEvents;
  13.     FrameTimer: TTimer;
  14.     procedure FormCreate(Sender: TObject);
  15.     procedure FormDestroy(Sender: TObject);
  16.     procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
  17.     procedure FrameTimerTimer(Sender: TObject);
  18.   private
  19.     { Private-Deklarationen }
  20.     myDC : HDC;
  21.     myRC : HGLRC;
  22.  
  23.     procedure RenderGL;
  24.   public
  25.     { Public-Deklarationen }
  26.   end;
  27.  
  28. var
  29.   glForm: TglForm;
  30.   Frames : Integer;
  31.  
  32. implementation
  33.  
  34. {$R *.DFM}
  35.  
  36. Procedure TglForm.RenderGL;
  37. begin
  38.   glTranslatef(0.0, 0.0,-4.0);
  39.   glBegin(GL_QUADS);
  40.   glVertex3f(-0.5,-0.5, 0.0);
  41.   glVertex3f(-0.5, 0.5, 0.0);
  42.   glVertex3f( 0.5, 0.5, 0.0);
  43.   glVertex3f( 0.5,-0.5, 0.0);
  44.  glEnd;
  45. end;
  46.  
  47.  
  48. procedure TglForm.FormCreate(Sender: TObject);
  49. var
  50.     myPalette : HPALETTE;
  51. begin
  52.  
  53.  glForm.Height := 600;
  54.  glForm.Width := 800;
  55.  
  56.  if not InitOpenGL then
  57.     raise Exception.Create('Fehler beim Initialisieren von OpenGL!');
  58.  
  59.   myDC := GetDC(Handle);
  60.   myRC:= CreateRenderingContext(myDC, [opDoubleBuffered] ,32, 0, 0, 0, 0, myPalette);
  61.   ActivateRenderingContext(myDC, myRC);
  62.  
  63.   glClearColor(0.0, 0.0, 0.0, 0.0); //Hintergrundfarbe
  64.   glEnable(GL_DEPTH_TEST); //Tiefenpuffer aktivieren
  65.  
  66. end;
  67.  
  68. procedure TglForm.FormDestroy(Sender: TObject);
  69. begin
  70.  DeactivateRenderingContext();
  71.  DestroyRenderingContext(myRC);
  72.  closeOpenGL();
  73. end;
  74.  
  75. procedure TglForm.ApplicationEvents1Idle(Sender: TObject;
  76.   var Done: Boolean);
  77. begin
  78.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  79.  glLoadIdentity;
  80.  
  81.  RenderGL;
  82.  
  83.  SwapBuffers(myDC);
  84.  
  85.  inc(Frames);
  86.  Done := False;   // Wichtig!!!
  87. end;
  88.  
  89. procedure TglForm.FrameTimerTimer(Sender: TObject);
  90. begin
  91.  glForm.Caption := 'OpenGL [Frames: ' + IntToStr(Frames) +']';
  92.  Frames := 0;
  93. end;
  94.  
  95. end.
  96.  


Achso die lösung mit den frames ist die Aktzeptabel oder fürn A****??

mfg
Avenger

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 30, 2003 22:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
@Viereck :
Die Tatsache das dein Quad nicht angezeigt wird, liegt wohl daran das es hinter der zFar-Plane liegt, da du diese nicht initialisiert hast.Schau dir dazu mal den Befehl gluPerspective an, mit dem man neben dem FOV, dem Ratio und der zNear-Plane auch die zFar-Plane setzen kann.Danach sollte dein Quad auch trotz Translation angezeigt werden.

@Frameanzeige :
Das ist schon gut so, ich mach das auch mittels eines Timers, und in meinen Augen ist das auch die akkurateste Lösung

P.S. : Du machst den selben Fehler den viele (auch oft Fortgeschrittene) machen, du achtest nämlich nicht auf deine Matrizen.Nicht umsonst bietet dir OpenGL eine Projektions- und eine Modelansichtsmatrix, die beide verschiedene Zwecke haben.Deshalb sollte deine Renderfunktion später so aussehen (damit nicht bestimmte Sachen in der falschen Matrix landen und es so Probleme gibt ) :
Code:
  1. procedure Render;
  2. // In die Projektionsmatrix wechseln und z.B. Perspektive setzen
  3. glMatrixMode(GL_PROJECTION);
  4. // Identitätsmatrix laden
  5. glLoadIdentity;
  6. // Perspektive setzen
  7. gluPerspective(...);
  8. // In die Modelansichtsmatrix wechseln
  9. glMatrixMode(GL_MODELVIEW);
  10. // Identitätsmatrix laden
  11. glLoadIdentity;
  12. // Objekte zeichnen
  13. ...


P.P.S. : Wenn du den Tiefenpuffer nutzen willst, solltest du auch ein Pixelformat verlangen welches dir einen Tiefepuffer anbietet.Deshalb musst du beim vierten Parameter von CreateRenderingContext auch die verlangte Tiefe des Tiefenouffers angebeben (8,16,24, wobei 24 ideal).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 30, 2003 23:08 
Offline
DGL Member

Registriert: Sa Aug 30, 2003 22:23
Beiträge: 36
Wohnort: Hamburg
Supi danke damit funktioniert es.
Was mich nur irgendwie wundert ist, dass das bei 'Der Entwickler' nicht verwendet wurde. (zumindest am anfang)

Mit den Matritzen bin ich noch gar nicht soweit. Ich wollt mir nur erstmal ne grundlage basteln, ua. da mir das template von der seite ein bischen zu überladen ist.

_________________
<< Ich werde Ewig leben oder beim Versuch dies zu erreichen, sterben! >>


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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 ]