Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du suchst den Orthographischen Modus, der sich mittels glOrtho() aktivieren lässt und in eine quasi 2D-Ansicht wechselt in der Objekte nicht perspektivisch verzerrt werden, und der damit für 2D-Grafiken geeignet ist.
Kleines Beispiel :
Code:
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0, 1024, 768, 0, -1, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
Dieses Codesample schaltet in den orthographischen Modus und setzt die Bildschirmdimensionen auf 1024x768 Pixel fest.
Registriert: Sa Nov 02, 2002 18:06 Beiträge: 299 Wohnort: Dresden
Also, wofür der erste Parameter da ist, weiß ich nicht. Der zweite und dritte gibt an, in wieviel "Maßeinheiten" das Bild unterteilt werden soll und nicht die Auflösung. Den Rest überschau ich jetzt nicht so schnell. Such mal in dem Form nach Ortho. Da dürfte sich einiges finden lassen.
_________________ "Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"
Für folgende Orthoansicht : glOrtho(0,640,480,0,-1,1) ist folgendes Quad auf jeden Fall sichtbar (Die Sache mit glTranslatef ist übrigens keine gute Lösung) :
Code:
glBegin(GL_QUADS);
glVertex3f(0, 0, 0);
glVertex3f(1, 0, 0);
glVertex3f(1, 1, 0);
glVertex3f(0, 1, 0);
glEnd;
Das liegt daran, das dieses Quad im Z-Bereich (definiert zwischen Near und Far) liegt.Alles was ausserhalb dieses Bereiches liegt, wird nicht angezeigt.
Die Tatsache das das komplette Bild gedehnt wird liegt in der Natur von OpenGL und macht den Orthomodus deshalb auch für 2D-Darstellungen so attraktiv, da man den Bildschirm auflösungsunabhängig zeichnen kann.
Wenn du dies verhindern willst, dann musst du mittesl glViewport deinen Anzeigebereich proportional zur Fenstergröße festlegen.Damit entbehrt die Nutzung von OpenGL zur 2D-Darstellung jedoch jeglicher (mal abgesehen von der Geschwindigkeit) Notwendigkeit...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ähm...ich glaub ich habs doch schon ein paar mal geschrieben : Der near und far-Parameter der glOrtho-Funktion dürfen nicht gleich sein.Dann werden nämlich nur Obkejte angezeigt, die genau auf dieser Z-Koordinate liegen.Du solltest für near einen Wert < 0 und für far einen Wert > 0 wählen, dann werden alle Eckpunkte zwischen den beiden Werten angezeigt.Wenn das bei dir nicht funzt, dann machst du beim Zeichnen deiner Objekte ganz einfach nen Fehler.
Und wenn du den Viewport mit glViewPort änddern tust, und nicht willst das Überstehendes abgeschnitten wird, dann musst du die Viewportgrößte ganz einfach auch in deinem Rendercode mit berücksichtigen.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Es wäre vielleicht keine schlechte, Idee, wenn du hier entweder deinen Zeichencode (falls nicht zu lange) postest, oder den Quellcode deines Programmes hochlädst.Dann könnt ich mir das mal genauer ansehen. Einen Fehler anhand einiger weniger Codefragmente und Beschreibungen zu finden ist nämlich meist ein hoffnungsloses Unterfangen.
Okay. Der gesamte Code ist schon ein bisschen lang, darum hab ich etwas gekürzt. Der Rest ist sowieso fast identisch mit dem OpenGL-Template. Es soll nur ein Quad gezeichnet werden. Ich musste glOrtho wieder mit zNear=-1 und zFar=-1 initialisieren, weil es sonst nicht funktioniert (ich geb ja zu: ich muss was falsch gemacht haben).
Ich habe es sogar mit dem unveränderten Template versucht, das hier in den Tutorials verwendet wird, habe die glDraw mit der Deinen überschrieben - ohne Erfolg. Ich weiß nicht, was das Template in jeder Zeile tut; es ist für mich nicht möglich, den Fehler zu finden, geschweige denn, ihn auszumerzen.
Edit: Mit 'Template' meine ich das OpenGL 1.2 Template (API).
DAS IST ES! Danke! Das Quad wurde vorher ein Pixel über der linken oberen Ecke dargestellt. Offensichtlich hat die Gleichsetzung von zNear und zFar den Effekt, dass der Bereich von (0|0|-1) bis (1|1|1) dargestellt wird. Sei's drum.
@ Son of Satan:
Zitat:
(Die Sache mit glTranslatef ist übrigens keine gute Lösung)
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.