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.
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.
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:
procedure GLControl1.OnRender(Sender:TObject);
begin
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0,640,0,480,0,450);
glMatrixMode(GL_MODELVIEW);
//Zeichenoperationen
end;
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.
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.
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.
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.
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.
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.