OpenGL Zoom mit glTranslatef funtkioniert nicht

üäpöol

Erfahrenes Mitglied
Hallo.
Erstmal:
Ich lerne erst seit ca. 96 Stunden OpenGL in Verbindung mit der WinAPI, deshalb rechnet bitte nicht mit zu viel Wissen oder Können. :D

Ich habe aus "GL_QUADS" einen Quader erstellt und möchte, dass sich dieser durch Benutzereingaben bewegt. Mein Problem ist/war der Zoom. Inzwischen mache ich es mit glScalef, aber ich sehe ziemlich oft, dass es mit glTranslatef ( 0, 0, zoom ); gemacht wird. Bei mir verschwindet der Quader dann einfach. Bei der X -oder Y-Achse gibt es keine Probleme.

Danke, an alle, die helfen! :)

Mfg
üäpöol
 
Hallo,

Mit welcher OpenGL Version arbeitest du zu Zeit? Ab OpenGL 3 ist sowohl glBegin, als auch glScalef/glTranslatef deprected. Daher die Frage ob du dir nicht lieber gleich die aktuelle API anschaust.
Zu deinem Problem: Möglicherweise schiebst du den Würfel hinter deine Far-Plane oder vor deine Near-Plane (die hast du vermutlich mit glFrustum gesetzt). Solltes das nicht sein solltest du mal etwas Code posten, dann schauen wir weiter.
 
Hm. Mit welcher Version ich arbeitet, weiß ich im Moment leider nicht so genau. (Es ist schon ein bisschen her, dass ich es runtergeladen habe.) Ich glaube, es war Version 3.7, bin mir aber nicht sicher. :(
Was bedeuted "deprected"?
Ich benutzte glOrtho, statt glFrustum, aber es bewegt sich eine Zeitlang nich´s (ca. 1 sek.) und dann ist es weg. Ich poste mal ein bisschen Code.

Code:
	case WM_KEYDOWN:
		switch ( wParam )
		{
		case VK_ADD:
			zoom = zoom - 0.001;
			glTranslatef ( 0, 0, zoom );
			glFlush ( );
			SwapBuffers ( hDC );
			InvalidateRect ( hwnd, NULL, true );
			break;
 
Welche Parameter hast du denn bei glOrtho übergeben? glOrtho erzeugt dir übrigends eine Parallelprojektion, glFrustrum eine perspektivische Projektion.

Weils mir grad noch aufgefallen ist: Lässt du das Fenster immer nur neu Zeichnen wenn sich was verändert hat, oder nach jedem Durchlauf der Renderschleife? Du darfst SwapBuffers auf jeden Fall nur einmal pro Frame aufrufen.
 
glOrtho sieht bei mir so aus:
Code:
glOrtho ( -1.0, 1.0, -1.0f, 1.0f, -1.0f, 1.0f );
Aber mir ist grade etwas aufgefallen. Wenn ich den Quader ein bisschen drehe, sehe ich schon, dass er sich bewegt. Nur, wenn ich gerade draufschaue, passiert nichts.
Ich lasse, das Fenster immer neu zeichnen, wenn sich etwas verändert.
 
Hallo,

Der Grund warum du von vorne keine Veränderung siehst liegt, wie oben schon erwähnt, daran, dass du mit einer Parallelprojektion arbeitest. Wenn du Tiefenwahrnemung brauchst, musst eine perspektivische Projektion verwenden.
Das Verschwinden des Würfels ist genau so wie vermutet dadurch bedingt, dass du ihn hinter die Far-Plane schiebst, welche du mit 1.0f angegeben hast. (siehe glOrtho) Wenn daher dein Würfel weiter weg ist als 1.0 wird er geclippt.

Ich glaube, es war Version 3.7

Version 3.7 gibts nicht. Es gibt nur 3.1, 3.2 und dann 4.

Was bedeuted "deprected"?

Das war mein Fehler, hätte "deprecated" heißen sollen. Bedeutet, dass diese Befehle zwar in der aktuellen Version noch drin sind, aber nicht mehr genutzt werden sollten da sie in einer der nächsten verschwinden werden. Der Grund dafür ist in diesem Fall das die von mir oben genannten Funktion (und einigen weitere) nur auf Basis der Fixed Function Pipeline funktionieren und diese auf moderner Hardware nicht mehr direkt unterstützt wird.
 
Ich habe nachgeschaut, es ist Version 3.1.
Heißt das zusammengefasst, dass glFrustum benutzen muss?
Wie kann man denn die anderen Funktionen ersetzten?
Um einen Link oder ein Buchtipp wäre ich sehr dankbar. :)
Ich probier´s heute Abend mal so aus. Nur ejtzt ahb ich keine Zeit.
 
Für den Anfang wirds reichen wenn du auf glFrustrum umsteigst und den Wert für die farPlane auf was größeres als 1 setzt.

Buchtipps:
OpenGL Superbible (ab der fifth Edition)

Ich hab dir auch einen Link per PM geschickt wo du ein paar Links findest.
 
Ach verdammt. :(
Ich war mir schon sicher, dass das die Lösung sei, aber es hat nichts geändert.
Es muss ein anderer Fehler sein.
Soll ich mal den ganzen Code posten?
 

Neue Beiträge

Zurück