gpt4 book ai didi

c++ - glMatrixMode(GL_PROJECTION) 和 glMatrixMode(GL_MODELVIEW) 的区别

转载 作者:行者123 更新时间:2023-12-04 21:59:42 28 4
gpt4 key购买 nike

glMatrixMode(GL_PROJECTION)有什么区别和 glMatrixMode(GL_MODELVIEW) ?

#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;
}
}
示例 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;
}
}
对于这两个代码,我得到了相同的结果。
谁能说明这些区别 glMatrixMode(GL_MODELVIEW)glMatrixMode(GL_PROJECTION) ?

最佳答案

当你在看一个场景时,从 GL 的角度来看,你有一个相机和一个镜头。

ModelView 是表示您的相机(位置、指向和向上 vector )的矩阵。

ProjectionView 是表示相机镜头(光圈、远场、近场等)的矩阵。

here有关这些的更多信息...

在像您这样的简单示例中,这并没有太大区别。但是,通常情况下,您需要让 OpenGL 使用矩阵乘法和求逆来计算内容。例如,如果您想将屏幕上的一个点转换为 GL 坐标系中的一个点,GL 将需要一个投影矩阵和一个模型矩阵,并将它们乘以特定的顺序。在这种情况下,您必须相应地使用它们,因为矩阵乘法是不可交换的。

关于c++ - glMatrixMode(GL_PROJECTION) 和 glMatrixMode(GL_MODELVIEW) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408113/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com