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

Aktuelle Zeit: Fr Jul 18, 2025 17:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit GLControl und 2D
BeitragVerfasst: So Okt 21, 2007 20:12 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

ich verwende in einem Programm das GLControl aus OpenGl 1.2. Mein Problem ist jetzt, dass ich 2dimensional darstellen muss und nicht die Stelle finde, wo das glOrtho hinmuss. Sowohl in OnSetup als auch in OnRender zeigte glOrtho keinerlei Auswirkungen. Vllt. hatte ja jemand auch schon mal das Problem oder weiß, woran es liegt. Für Hilfe wäre ich sehr dankbar.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 21, 2007 21:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo und herzlich willkommen :)

Wenn du es noch nicht getan dann schau dir mal das 2D Tutorial an.

Also ich kenne die Komponente nicht aber ich denke mir da gerade mal was. Je nachdem was du machen willst ist entweder OnRender oder OnSetup das bessere. Wenn du außschließlich nur 2D haben willst aolltest du das zu begin im OnSetup einstellen. Wenn du aber zu erst 3D haben willst und dann etwas in 2D dann musst du die Ansicht wärend dem Zeichnen umstellen. Also dann in OnRender.

Und glOrtho alleine geht nicht. Du musst zu erst in die Projektion wechseln, die Matrix zurücksetzen und dann kannst du glOrtho aufrufen. Und vergiss nicht dann wieder auf die ModelView matrix zu wechseln.


Zuletzt geändert von Lossy eX am Mo Okt 22, 2007 10:16, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 22, 2007 09:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Lossy hat geschrieben:
Wenn du außschließlich nur 2D haben willst solltest du das zu begin im OnRender einstellen.

Lossy meint hier sicher OnSetup ;)

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 22, 2007 10:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ach Quatsch. So was würde ich doch nie tun. ;)

Habs der Vollständigkeit oben auch noch mal angepasst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 23, 2007 14:17 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

erst einmal vielen Dank. Die Befehle haben in OnSetup keinerlei Auswirkungen, aber in OnRender gibts wieder Probleme:
Code:
  1.  
  2. procedure GLControl1.OnRender(Sender: TObject);
  3. begin
  4.   glMatrixMode(GL_PROJECTION);
  5.   glLoadIdentity;
  6.   glOrtho(0, 640, 0, 480, 0, 450);
  7.   glMatrixMode(GL_MODELVIEW);
  8.   //Zeichenoperationen
  9. end;
  10.  

Das Problem ist jetzt, das ich nichts sehe. Wenn ich das glOrtho duch ein gluPerspective ersetze, funzt es wieder. Wenn ich beides hintereinander setze, geht auch nix. Vielleicht hat ja doch einer ne Idee, was falsch ist.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 23, 2007 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich vermute mal, dass es doch da ist. Aber so klein, dass du es nicht wahr nimmst.

Denn mit Perspektive befindet sich die Koordinate (0, 0, 0) in der Mitte des Bildschirmes und genau an der Mattscheibe. Breiten von 1-2 sehen dann riesig aus.

Wenn du dich aber im Orthomodus befindet, dann richten sich die Koordinaten nach den Parametern. Und in deinem Falle ist die Koordinate (0, 0, 0) links unten auch direkt am Bildschirm. Allerdings sind Größenangaben von 1-2 dann meist nur 1-2 Pixel groß.

Diese Positions und Größenänderung musst du dann berücksichtigen. Und falls du dir was deinen Code nicht sicher bist dann poste doch bitte einfach mal den Code oder falls es etwas mehr ist dann einfach mal packen und anhängen. Dann schauen wir mal drüber.


PS: Ich habe gerade mal gesucht und mir den Code der Komponente angesehen. Und so wie es scheint setzt die Komponente von sich aus ständig die Perspektive und OnSetup wird nur ein einziges mal aufgerufen. Außerdem deaktiviert und aktivierst sie dauerhaft den RenderKontext. Wenn du nur bei bedarf neu zeichnen möchtest mag das okay sein aber wenn es um FPS geht ist das ein absoluter Performancefresser. Ich würde dir also dringend ans Herz legen die Komponente sein zu lassen und den Kontext selber auf einem Formular zu erstellen. Der Code den du dafür brauchst ist alles andere als komplex. Aber dazu kannst du auch mal entweder ins DGL-SDK oder in die File section. Dort gibt es unter Templates ganz unten eines für die VCL.

PPS: Außerdem ist der Header den die Komponente benutzt alles andere als aktuell. Das dürfte zwar derzeit für dich kein Problem sein aber das vermeidet später womöglich Probleme beim Umstieg.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 23, 2007 16:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Vielleicht liegt es auch an etwas anderem...
Versuch mal die Modelview-Matrix nach dem umstellen der Projektions-Matrix zurückzusetzen.
Also,
Code:
  1. glMatrixMode(GL_PROJECTION);
  2. glLoadIdentity;
  3. glOrtho(0, 640, 0, 480, 0, 450);
  4. glMatrixMode(GL_MODELVIEW);
  5. glLoadIdentity;   // <--- hier
  6. //Zeichenoperationen

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 23, 2007 16:22 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

vielen Dank, es lag wirklich an der Größe. Mit einem glScalef(150, 150, 150) ist es in etwa genauso groß wie bei der perspektivischen Projektion. Allerdings muss man bei dem glOrtho auf die richtigen Proportionen achten, also z. B.
Code:
  1.  glOrtho(0, 640, 0, 640/(viewtop.Width/viewtop.Height), 0, 450);

da sonst die Grafik verzerrt wird. Ob ich auf das Control verzichte, überlege ich mir noch einmal, das ganze soll ein Leveleditor werden, FPS ist also nicht so wichtig.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 23, 2007 18:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Für glOrtho benutze ich grundsätzlich immer die Größe des Fensters auf dem ich render. So habe ich immer Pixelgenaue angaben und Seitenverhältniss ist auch immer richtig.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 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.035s | 16 Queries | GZIP : On ]