OpenGL入门级问题,关于modelview矩阵。

时间:2021-09-27 19:19:03
glMatrixMode(GL_MODELVIEW);
glLoadIdentidty();
glBegin(GL_POINTS);
glVertex3f(0f,0f,0f);
glEnd();

为什么我看到的程序里面画图的命令都是在glMatrixMode(GL_MODELVIEW);之后?不是应该先建好模型再进行模型和视图变换吗?那么这样画出来的点是在哪个坐标系下面的? 

3 个解决方案

#1


难以解释

0.先摆好物体,1.然后选点放相机,2.再决定拍下的图像采用那种投影方式 正常0,1,2是我们考虑问题的顺序

但在GL中,这个顺序是反的,即你要先确定2 投影方式,然后放好相机(理解gluLookAt函数),然后摆放你的可视对象

#2


投影矩阵与坐标系无关

模型视图矩阵是相对于一个隐含的世界坐标系来定位的

glTranslate3f(0,0,-10),可能看到资料这个函数可理解为相机沿Z正向移动10,也可理解为将所有物体沿Z负向移动10

建议熟悉gluLookAt函数,将View设置和模型彻底分离! 此函数就是设置相机在世界坐标系中的位置即视向

glTranslate和glRotate函数操作的就是3D可视化对象,把这些对象摆到指定的位置,比如将一个圆杯子放到方桌的桌面中心,涉及0.杯子和方桌在建模时的坐标系, 1. 将杯子移动到桌面的位姿矩阵  可能还涉及建模时的方向问题

#3


谢楼上,具体原理我还无法理清。但已经知道建模是在modelview矩阵操作后的坐标系下面的。

#1


难以解释

0.先摆好物体,1.然后选点放相机,2.再决定拍下的图像采用那种投影方式 正常0,1,2是我们考虑问题的顺序

但在GL中,这个顺序是反的,即你要先确定2 投影方式,然后放好相机(理解gluLookAt函数),然后摆放你的可视对象

#2


投影矩阵与坐标系无关

模型视图矩阵是相对于一个隐含的世界坐标系来定位的

glTranslate3f(0,0,-10),可能看到资料这个函数可理解为相机沿Z正向移动10,也可理解为将所有物体沿Z负向移动10

建议熟悉gluLookAt函数,将View设置和模型彻底分离! 此函数就是设置相机在世界坐标系中的位置即视向

glTranslate和glRotate函数操作的就是3D可视化对象,把这些对象摆到指定的位置,比如将一个圆杯子放到方桌的桌面中心,涉及0.杯子和方桌在建模时的坐标系, 1. 将杯子移动到桌面的位姿矩阵  可能还涉及建模时的方向问题

#3


谢楼上,具体原理我还无法理清。但已经知道建模是在modelview矩阵操作后的坐标系下面的。