GL_MODELVIEW和GL_PROJECTION

dhe*_*ein 1 opengl

我的代码目前看起来像这样:

glViewport (0, 0, this->w(), this->h());

glMatrixMode(GL_PROJECTION);

glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
//glTranslated (m_fXmovement, 0.0, m_fZmovement - 5);
//glRotated (m_fYangleView, 1.0, 0.0, 0.0);
//glRotated (m_fXangleView, 0.0, 1.0, 0.0);

///// Model View \\\\\

glMatrixMode(GL_MODELVIEW);

glTranslated (m_fXmovement, 0.0, m_fZmovement - 5 );
glRotated (m_fYangleView, 1.0, 0.0, 0.0);
glRotated (m_fXangleView, 0.0, 1.0, 0.0);

DrawWaveFrontObject (m_pDataObjectMedia);

glPushMatrix();
    glTranslated (0.0, -3.0, 0.0);  
    DrawArea();
glPopMatrix();  

DrawClickAnimation();

glLoadIdentity();
Run Code Online (Sandbox Code Playgroud)

首先我在GL_PROJECTION中运动部件,所有都运行良好,直到我使用雾....感觉就像相机没有移动,感觉更像是指向那台相机的额外相机....

然后我意外地将运动部件复制到了GL_MODELVIEW,雾就像我希望它一样行动......一切都很好,接受点击动画不再与该区域有关,现在动画随着我的自我而移动透视....我真的不明白我必须在这两个VIEW中添加什么样的图纸.任何人都可以根据我的代码给我提供示例或解释,或暗示我可以在我的风格中改进什么?

Vis*_*a k 9

opengl.org论坛:

投影矩阵用于创建查看量.想象一下现实世界中的场景.你并没有真正看到周围的一切,只有你眼睛允许你看到的东西.如果你是一条鱼,你可以看到更广泛的东西.因此,当我们说我们设置投影矩阵时,我们意味着我们设置了我们想要从我们创建的场景中看到的内容.我的意思是你可以在世界的任何地方绘制物体.如果它们不在视图卷内,您将看不到任何内容.创建视图体积时,想象您创建了6个定义视野的剪裁平面.

对于模型视图矩阵,它用于对您世界中的模型(对象)进行各种转换.像这样你只需要定义一次你的对象然后翻译它或旋转它或缩放它.

在绘制场景中的对象之前,可以使用投影矩阵来设置视图体积.然后绘制对象并相应地更改模型视图矩阵.当然,您可以在绘制模型的中途更改矩阵,例如,如果您想要绘制场景然后绘制一些文本(使用某些方法可以在正交投影中更容易工作),然后更改回模型视图矩阵.

至于名称模型,它与建模和查看转换的二元性有关.如果你将相机拉回5个单位,或者将物体向前移动5个单位,它基本上是相同的.