Différence entre glMatrixMode(GL_PROJECTION); glMatrixMode(GLMATRIXMODE);
Quelle est la différence entre glMatrixMode(GL_PROJECTION); glMatrixMode(GLMATRIXMODE);
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glut.h>
#define KEY_ESCAPE 27
void display();
void keyboard(unsigned char,int,int);
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH );
glutInitWindowSize(600,400);
glutCreateWindow("Opengl Test");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
void display() {
float x,y,z;
int i;
x=0;
y=-0.8;
z=0;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,0);
glBegin(GL_POINTS);
for(i=0;i<98;i++) {
glVertex3f(x,y,z);
x=x+0.01;
}
glEnd();
glutSwapBuffers();
}
void keyboard(unsigned char key, int mousePositionX, int mousePositionY) {
switch ( key ) {
case KEY_ESCAPE:
exit ( 0 );
break;
default:
break;
}
}
Exemple-2:
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glut.h>
#define KEY_ESCAPE 27
void display();
void keyboard(unsigned char,int,int);
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH );
glutInitWindowSize(600,400);
glutCreateWindow("Opengl Test");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
void display() {
float x,y,z;
int i;
x=0;
y=-0.8;
z=0;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,0);
glBegin(GL_POINTS);
for(i=0;i<98;i++) {
glVertex3f(x,y,z);
x=x+0.01;
}
glEnd();
glutSwapBuffers();
}
void keyboard(unsigned char key, int mousePositionX, int mousePositionY) {
switch ( key ) {
case KEY_ESCAPE:
exit ( 0 );
break;
default:
break;
}
}
Pour les deux codes, j'obtiens le même résultat.
Quelqu'un peut-il montrer la différence de ces glMatrixMode(GLMATRIXMODE); glMatrixMode(GL_PROJECTION); la modification de ce code?
OriginalL'auteur shibly | 2012-05-02
Vous devez vous connecter pour publier un commentaire.
Lorsque vous êtes à la recherche à une scène, à partir de GL point de vue, vous avez un appareil photo et un objectif.
ModelView est la matrice qui représente votre caméra (position, de pointage, et le vecteur).
ProjectionView est la matrice qui représente l'objectif de la caméra (l'ouverture, la mesure en champ proche-champ, etc).
Voir ici pour plus d'info sur ces...
Dans des exemples simples comme la vôtre, qui ne fait pas beaucoup de différence. Cependant, en général, vous devez demander à OpenGL pour calculer des choses en utilisant la matrice de multiplications et d'inversions. Par exemple, si vous souhaitez transformer un point sur l'écran à un point de la GL système de coordonnées, GL aurez besoin d'une matrice de projection et d'un modèle de matrice et de les multiplier par un ordre spécifique. Dans ce cas, vous devez les utiliser en conséquence, car la matrice de multiplications sont non-commutable.
À la FOIS la matrice MODELVIEW ET de la matrice de PROJECTION affecter la scène finale. Si l'on regarde les exemples, vous verrez les personnes manipulant à la FOIS de ceux, par exemple, GLMATRIXMODE et GL_PROJECTION. Vous êtes probablement mieux de COMMENCER à partir d'un exemple utile, mais si vous voulez modifier votre code pour en FAIRE quelque chose avec l'un des matrices, essayez d'ajouter des lignes qui suivent votre glLoadIdentity() pour manipuler la matrice actuelle, comme on le voit dans le message lié.
glFrustum
pour la PROJECTION, et/ouglTranslated
ouglRotated
pour MODELVIEW.OriginalL'auteur Jorge Leitão
Bien sûr, vous n'obtenez pas un résultat différent. Vous n'avez pas vraiment rien faire avec la matrice. Vous définissez l'identité... qui est la par défaut valeur.
En général, vous devez seulement mettre les matrices de projection dans le
GL_PROJECTION
de la matrice. Les transformations qui vont dans le modèle de l'espace pour la caméra de l'espace qui devrait aller dans leGL_MODELVIEW
de la matrice.Si vous ne savez pas ce matrices de projection sont, ou si vous ignorez ce qu'est une matrice est, je suggère de regarder jusqu' bon OpenGL matériel d'apprentissage. Et en évitant l'utilisation de fonction fixe GL.
OriginalL'auteur Nicol Bolas