我正在为iPhone制作一个简单的游戏,并试图实现在GLView周围移动相机的效果.
我glDrawArrays用顶点和颜色指针绘制了大约一百个对象.在此之后,我想将相机向右移动1个单位.这是我在我的drawView方法中的代码片段.我将矩阵模式更改为投影堆栈,然后在项目操作完成后更改回模型视图模式(我可能会出错,我是OpenGL的新手).
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glTranslatef(1.0, 0.0, 0.0);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
无论如何,结果绝对不是预期的.发生的事情是我非常简短地看到我的物体(可能是一个框架),然后它们消失了.如果我带走glTranslatef上面的区块,就会发生同样的事情.
我究竟做错了什么?
提前致谢!


初学者OpenGL的一个令人困惑的方面是投影矩阵中发生的事情与模型视图矩阵上发生的事情之间的区别(为什么你甚至需要它们?)
投影矩阵负责将顶点的坐标转换为2D坐标系中的点(它将世界推向虚拟胶片 - 视口).投影矩阵仅指定相机的行为(例如:它应该是广角镜头,还是长焦镜头,还是完全正交的镜头,如建筑倾斜图纸?).
另一方面,模型视图矩阵负责指定顶点到达3D空间的位置.因此,例如,要指定角色的手臂相对于角色的身体的位置,或者角色相对于世界的位置,您将需要更改模型视图矩阵.特别要注意的是,相机的位置和方向的变化属于模型视图矩阵(它是它的"视图"部分)
令人困惑的原因是,在一天结束时,您给OpenGL的顶点乘以模型视图矩阵,然后乘以投影矩阵.也就是说,给定模型视图矩阵M,投影矩阵P和顶点v,顶点的最终坐标由P M v 给出.这意味着无论您使用哪个矩阵,某些变换似乎都有效.你应该小心这一点 - 当你使用更高级的OpenGL技术时,你将遇到使用正确矩阵产生影响的情况.
但是,在你达到这一点之前,让我给你一个很好的经验法则.直到你习惯了两个矩阵之间的区别,只使用glOrtho或glFrustum投影矩阵(gluPerspective他们的朋友也可以).所有其他电话(glTranslate,glScale,glRotate等)属于类的东西,你应该做的模型视图矩阵.
| 归档时间: |
|
| 查看次数: |
2745 次 |
| 最近记录: |