OpenGL Zoom mit glTranslatef funtkioniert nicht

Ich hab das ganze mal mit gluPerspective und glScalef und es hat fast perfekt funktioniert.
Ich muss am Anfang des Programms, alles etwas mit glTranslatef verkleinern, aber das Hauptproblem ist, dass ich nicht ganz nah zoomen kann. Anscheinend verschiebt glTranslatef die Objekte nach hinten, während glScalef zoomt. Die Unterschiede sind:

Code:
glViewport ( 0, 0, ( GLsizei ) 800 , ( GLsizei ) 600 );
		glMatrixMode ( GL_PROJECTION );
		glLoadIdentity ( );
		gluPerspective ( 45, aspectRatio, 0.1, 100 );
		glMatrixMode ( GL_MODELVIEW );
		glLoadIdentity ( );
		glTranslatef ( 0, 0, -3 );

und

Code:
case WM_KEYDOWN:
		switch ( wParam )
		{
		case VK_UP:
			zoom = zoom + 0.001;
			glScalef ( zoom, zoom, zoom );
			glFlush ( );
			SwapBuffers ( hDC );
			InvalidateRect ( hwnd, NULL, true );
			break;
		case VK_DOWN:
			glRotatef ( 30, 0, 0, 0 );
			glFlush ( );
			SwapBuffers ( hDC );
			InvalidateRect ( hwnd, NULL, true );
			break;
		case VK_LEFT:
			glEnable(GL_DEPTH_TEST);
			glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
			glRotatef ( 5, 0, -1, 0 );
			glFlush ( );
			SwapBuffers ( hDC );
			InvalidateRect ( hwnd, NULL, true );
			break;
		case VK_RIGHT:
			glEnable(GL_DEPTH_TEST);
			glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
			glRotatef ( 5, 0, 1, 0 );
			glFlush ( );
			SwapBuffers ( hDC );
			InvalidateRect ( hwnd, NULL, true );
			break;
		}
		break;

Vielleicht kann mir ja noch jemand damit helfen, dass ich egal, wie ich es einstelle, nur kurz bis vor den Quader zoomen kann, wenn er nicht rotiert wurde.

Mit glFrustum wirkt da ganze immer noch "verzerrt".
 
Hallo,

Die beiden Funktionen glScale und glTranslate tun genau das wie sie heißen: glTranslate --> Translate --> verschiebt Vertices, glScale --> Scale --> skaliert die Vertices.
Du musst dir grad bei glTranslate vorstellen das du eine Kamera in der virtuellen Welt platziert hast, und diese dann verschiebst. Daher kannst du sie natürlich bis ganz ans Objekt ranschieben, wenn das Objekt aber klein ist wird es auch dann nicht Bildschirmfüllend sein.

Edit: gluPerspective tut intern nichts außer die Parameter umrechnen und dann damit glFrustrum aufzurufen.
 
Es verschwindet immer dann wenn du entweder die Kamer durch das Objekt durchschiebst (also das Objekt hinter der Kamera ist), oder du die Kamera so weit wegschiebst das das Objekt nicht mehr dargestellt werden kann (hinter der Far-Plane ist).
 
Das kommt drauf an welches Endergebnis eigentlich erreicht werden soll. Wenn du nur ein Objekt hast und dieses vergrößern und verkleinern willst dann kannst du eh skalieren. Wenn du das Verhältnis zwischen mehreren Objekten erhalten musst dann kannst du z.B.: den Kameraöffnungswinkel verkleinern oder vergrößern.
 
Nochwas: Wenn ich weit genug weggezoomt habe und dann das Objekt zu weit rotiere, dass es fast dirket vor mir ist, kann ich ohne Probleme die Kamera durch dsa Objekt durchschieben. Ich versteh das nicht . :(
 
Weil du zur Zeit auch die z-Achse skalierst, und dir somit wieder die z-Werte hinter Far oder Near-Plane verschwinden. Du müsstest halt dafür sorgen das nur entlang der Kameraebene skaliert wird.
 
Ja, auch das hab ich schon ausprobiert, aber in diesem Fall kann ich nicht "durch die vordere (rote) Ebene" und wenn ich danach den Quader rotiere, verschwimmen die Flächen ineinander. Warum weiß ich nicht.
 
Zurück