| | |
OpenGL - Problems with zoom in/zoom out
Thread Solved |
Hi, everyone!
I'm having problems with the implantation of a free camera in a 3D world. For now, I'm using the A/D/W/S keys to make the camera go right, left, forward and backward. The problem is that I don't see the effects of the forward and backward movements. Even with high translation values, the effect (being visually close of far of the object) doesn't appear.
Can you help me with this problem? I tried to solve this for hours, but I am so blindfooled by my code so I can't see the cause of the problem. The transformation matrix looks good...
N.B: You may need some additional includes to make the code work.
I'm having problems with the implantation of a free camera in a 3D world. For now, I'm using the A/D/W/S keys to make the camera go right, left, forward and backward. The problem is that I don't see the effects of the forward and backward movements. Even with high translation values, the effect (being visually close of far of the object) doesn't appear.
Can you help me with this problem? I tried to solve this for hours, but I am so blindfooled by my code so I can't see the cause of the problem. The transformation matrix looks good...
N.B: You may need some additional includes to make the code work.
#include <gl/glut.h>
#include <stdio.h>
//Facteurs de translation et de rotation.
GLdouble translationFactor = 25.0;
GLdouble rotationFactor = 0.5;
GLdouble objectTransformationMatrix[16];
GLint windowX = 500;
GLint windowY = 500;
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
GLfloat materialSpecular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat materialShininess[] = { 50.0 };
GLfloat lightPosition[] = { 5.0, 5.0, 0.0, 0.0 };
GLfloat lightAmbiant[] = {0.0, 0.0, 1.0, 0.0 }; //Couleur d'ambiance bleue.
//Préparation et activation de la source lumineuse.
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT, GL_SPECULAR, materialSpecular);
glMaterialfv(GL_FRONT, GL_SHININESS, materialShininess);
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbiant);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc( GL_LESS );
glEnable(GL_DEPTH_TEST);
//Préparation du système de coordonnées...
glViewport(0, 0, 500, 500);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 500.0, 0.0, 500.0, -5000.0, 5000.0);
//On met la perspective de vue ici.
//gluPerspective(90, (GLdouble)windowX / (GLdouble)windowY, 1, 300);
//gluPerspective(90, 1, 1, 300);
//Matrice de transformation de la sphère chargée.
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(250.0, 250.0, 0.0); //Position initiale de la sphère.
glGetDoublev(GL_MODELVIEW_MATRIX, objectTransformationMatrix);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//On dessine la sphère
glPushMatrix();
glLoadMatrixd(objectTransformationMatrix);
glutSolidSphere(50.0, 50, 50);
glPopMatrix();
//Application de la matrice de transformation.
glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//On va chercher la matrice de transformation.
glLoadMatrixd(objectTransformationMatrix);
switch (key)
{
case 'a': //On se tasse à gauche -- tous les objets se tassent à droite.
{
glTranslated(translationFactor, 0.0, 0.0);
break;
}
case 'd': //On se tasse à droite -- tous les objets se tassent à gauche.
{
glTranslated(-translationFactor, 0.0, 0.0);
break;
}
case 'w': //On va en avant. -- les objets "avancent" vers la caméra.
{
glTranslated(0.0, 0.0, translationFactor);
break;
}
case 's': //On va en arrière. -- les objets reculent vers la caméra.
{
glTranslated(0.0, 0.0, -translationFactor);
break;
}
case '4': //On tourne la caméra vers la gauche -- TODO
{
break;
}
case '6': //On tourne la caméra vers la droite
break;
case '2': //On tourne la caméra vers le haut. (vue inversée)
break;
case '8': //On tourne la caméra vers le bas. (vue inversée)
break;
case 'z': //For debugging purposes
{
printf("%f %f %f %f\n",objectTransformationMatrix[0],objectTransformationMatrix[4],objectTransformationMatrix[8],objectTransformationMatrix[12]);
printf("%f %f %f %f\n",objectTransformationMatrix[1],objectTransformationMatrix[5],objectTransformationMatrix[9],objectTransformationMatrix[13]);
printf("%f %f %f %f\n",objectTransformationMatrix[2],objectTransformationMatrix[6],objectTransformationMatrix[10],objectTransformationMatrix[14]);
printf("%f %f %f %f\n",objectTransformationMatrix[3],objectTransformationMatrix[7],objectTransformationMatrix[11],objectTransformationMatrix[15]);
printf("---------------------------------------------------------\n");
break;
}
}
//On sauvegarde la matrice de transformation des objets.
glGetDoublev(GL_MODELVIEW_MATRIX, objectTransformationMatrix);
glutPostRedisplay();
}
void reshape(GLint x, GLint y)
{
windowX = x;
windowY = y;
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("A legendary camera!");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
} Last edited by GDICommander; May 18th, 2009 at 10:30 am.
It's because you are using an orthographic projection, in an orthographic projection, a higher depth doesn't make objects appear smaller.
See : http://www.songho.ca/opengl/gl_projectionmatrix.html
So, if you want this effect, use gluPerspective, with a FOV (first parameter) of about 45.. (90 is waaay too wide a field-of-view, it will make the 'viewer' seem infinitly small). You may well need to scale your objects, to make them 'the right size' under this new projection
See : http://www.songho.ca/opengl/gl_projectionmatrix.html
So, if you want this effect, use gluPerspective, with a FOV (first parameter) of about 45.. (90 is waaay too wide a field-of-view, it will make the 'viewer' seem infinitly small). You may well need to scale your objects, to make them 'the right size' under this new projection
Last edited by MattEvans; May 18th, 2009 at 4:10 pm.
Plato forgot the nullahedron..
![]() |
Similar Threads
- Fuji Film Finepix 6800 Zoom Webcam problems (USB Devices and other Peripherals)
- Zoom Image (ColdFusion)
- iMac with external Zoom Modem (Apple Hardware)
- Word documents opening up at 200% zoom (Windows Software)
- Visual c++ 2005 and OpenGl Problems (Game Development)
Other Threads in the Game Development Forum
- Previous Thread: What are the best programming language for Game Programming
- Next Thread: Need Help About ArrayList of Sprites ?
| Thread Tools | Search this Thread |
3d advertising ai algorithm ban c++ cambridge camera censorship china competition console development engine fov fpx game gamer games gaming gauntanamo government idaho in-gameadvertisement intellectualproperty laracroft live manhunt math mathematics matrix mercenaries microsoft mmorpg modded msn naked news nintendo obama palin physics pirate playstation politics projection ps3 rpg search software sony stephenhawking stocks studio technology terrorism tombraider uk videogame web wii world-of-warcraft xbox xbox-live xbox360






