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:
und
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".
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".