J'ai un rectangle simple que j'ai dessiné à l'écran dans opengl.Déplacement de certains points dans l'axe z en OpenGL ne fonctionne pas
Ma cible est de dessiner ce rectangle en 3D de sorte que le côté gauche de celui-ci soit plus profond (axe z) que le côté droit. Regardez
à ce pic afin que vous puissiez voir ce que je veux dire: http://www.battleteam.net/tech/fis/docs/images/metroid_hud1.png
Ceci est le code que je l'utilise pour dessiner un rectangle qui utilise des couleurs différentes et je me suis déplacé les deux points côté gauche vers le haut un peu.
glColor4f(1.0, 1.0, 1.0, 1.0);
glVertex3f(0, -20, z_left);
glColor4f(0.0, 1.0, 1.0, 1.0);
glVertex3f(SQUARE_WIDTH, 0, 0);
glColor4f(1.0, 0.0, 1.0, 1.0);
glVertex3f(SQUARE_WIDTH, SQUARE_HEIGHT, 0);
glColor4f(1.0, 1.0, 0.0, 1.0);
glVertex3f(0, SQUARE_HEIGHT-20, z_left);
j'utiliser la variable z_left pour modifier dynamiquement la valeur z pour les points les deux sur le côté gauche pour déplacer ces points sur l'axe des z. Mais ce qui se passe, c'est que le rectangle est coupé du côté gauche. Cela se produit lorsque la valeur z_left atteint la variable zFar ou zNear définie via l'appel de fonction "glOrtho". Mon nom ressemble à ceci: glOrtho (0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100); Donc, si le z_left devient supérieur à 100 ou inférieur à -100, cette étrange coupure commence. Je ne sais pas pourquoi. Je m'attendais à ce que le côté gauche du rectangle soit déplacé sur l'axe z, c'est-à-dire le déplacer plus loin (loin de l'œil) ou plus près. Quelqu'un peut-il me dire ce qui ne va pas ici? Le reste du code est assez simple et standard. Un rectangle simple dans un environnement 3D a été légèrement modifié pour avoir un rectangle "3d panel". Mon init OpenGL est semblable à ceci:
glClearColor(0, 0, 0, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Merci pour toute aide.
Ok, alors qu'est-ce que cela signifie? Mon init est-il faux? Je pensais que je suis déjà dans une projection en perspective. La seule chose que je fais est l'init ci-dessus, puis commencez à dessiner avec glVertex3f. Peux-tu m'expliquer ce qu'il faut changer? Le deuxième bloc de votre réponse est logique. Merci pour votre aide. – NovumCoder
Vous utilisez glOrtho, qui fait une projection orthographique. Utilisez gluPerspective pour obtenir une projection en perspective. –
Ah génial. Juste googlé pour "projection de perspective ouverte". Je vois deux différents ici. GlFrustum et gluPerspective. Comme j'utilise SDL + OpenGL, je pense que "glFrustum" est mon choix. Un grand merci. – NovumCoder