OpenGL Zoom mit glTranslatef funtkioniert nicht

Kann mir noch jemand helfen? Ich hab´s leider immer noch nicht rausbekommen, was ich falsch mache. Hat´s schonmal jemand kompiliert? :( Vielen Dank!
 
Hallo,

Was willst du denn jetzt eigentlich machen? Zuerst war immer von einer Zoom-Funktion die rede, da ist es aber normal das man nicht in den Würfel hineinkommt. Jetzt wunderst du dich darüben. Ich hab in den letzten Posts schon alle Varianten aufgezählt die du zur Verfügung hast, welche du davon verwendest hängt davon ab was du erreichen willst.
 
Ich möchte nach wie vor in den Quader hineizoomen, was ja auch funktioniert, wenn er weiter "vorne" ist und ich verstehe nicht ganz, warum es so funktioniert und anders nicht.
PS: Die erste Frage war, wie man die Kameraposition auf der Z-Achse mit glTranslatef verschiebt.
 
Zuletzt bearbeitet:
Ich hab´s jetzt endlich geschafft. Man muss einfach die vorherige Rotation rückgänging machen und dann wiederholen. Hier der Code, für alle, die ein ähnliches Problem haben oder hatten:

Code:
case WM_CREATE:
		hDC = GetDC ( hwnd );
		iPF = ChoosePixelFormat ( hDC, &pfd );
		SetPixelFormat ( hDC, iPF, &pfd );
		hRC = wglCreateContext ( hDC );
		wglMakeCurrent ( hDC, hRC );

		glViewport ( 0, 0, ( GLsizei ) 800 , ( GLsizei ) 600 );
		glMatrixMode ( GL_PROJECTION );
        glLoadIdentity ( );
		gluPerspective ( 45, aspectRatio, 0.1, 10000 );
		glTranslatef ( 0, 0, -3 );
		break;

	case WM_KEYDOWN:
        switch ( wParam )
        {
        case VK_UP:
			glRotatef ( rotate, 0, 1, 0 );
			glTranslatef ( 0, 0, 0.1 );
			glRotatef ( -rotate, 0, 1, 0 );
            glFlush ( );
            SwapBuffers ( hDC );
            InvalidateRect ( hwnd, NULL, true );
            break;
        case VK_DOWN:
            glRotatef ( rotate, 0, 1, 0 );
			glTranslatef ( 0, 0, -0.1 );
			glRotatef ( -rotate, 0, 1, 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 );
			rotate = rotate + 5;
			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 );
			rotate = rotate - 5;
			glRotatef ( 5, 0, 1, 0 );
			glFlush ( );
			SwapBuffers ( hDC );
			InvalidateRect ( hwnd, NULL, true );
			break;
		}

Vielen Dank, an alle, die geholfen haben, also vorallem Steiner_B!
Ich habe auf jedenfall einiges gelernt. :)
 

Neue Beiträge

Zurück