在BlackBerry上使用OpenGL绘图(九):投影变换
2011-09-26 11:14
435 查看
9 投影变换
以上讲解的是“视图模型模式”,主要是如何对观察点或者是模型进行变换,下面粗略了解一下“投影模式”。“投影模式”变换的作用是控制3D模型如何投影到2D的屏幕上。一般希望的是将3D模型投影到2D屏幕上时和我们看见现实世界的物体相同,有近大远小的透视效果,这种投影模式称之为“透视投影”。在特殊的情况下,如机械制图等,可能希望将3D模型在2D屏幕投影出来时保持实际大小,不论模型离观察点多远,它在屏幕上投影出来的大小都是相同的,这种投影方式称之为“正投影”。
如果使用“正投影”的话,远处的物体不会变小,不符合人类的视觉习惯,当物体在2D屏幕上显示出来的时候用户会有“近小远大”的错觉。所以,除了有特殊要求,一般的应用程序都使用“透视投影”。OpenGLDemo样例中使用的也是“透视投影”。
样例在CubeRenderer的sizeChanged方法中设置了投影方式为“透视投影”。首先是调用glMatrixMode方法,通过参数GL_PROJECTION将当前的变换模式设为投影变换模式,表示之后的操作都是对投影方式的操作,然后调用glLoadIdentity方法载入对应的单位距阵。
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
然后通过GLUtils的gluPerspective方法将投影方式设置成“透视投影模式”,如果希望将投影方式设置成“正投影”,需要用GLUtils的gluOrtho2D方法替代gluPerspective方法。
net.rim.device.api.opengles.GLUtils.gluPerspective(gl, 45.0f,
(float) width / (float) height, 0.15f, 100.0f);
gluPerspective接受五个参数:第一个参数是GL实例;第二个参数是视角,这个参数只接受0到180之间的值,指定的是在YZ平面上视野的角度,系统通过这个参数计算出Y轴上什么范围内的模型需要绘制;第三个参数是屏幕的纵横比例,就是X和Y的比例,因为Y轴的范围已经指定,通过纵横比例可以计算出X轴上什么范围的模型需要绘制;第四个参数和第五个参数指定的最靠近的点和最远的点,只有在两者之间的模型才会被绘制,通过第四个和第五个参数系统可以计算出Z轴上什么范围内的模型需要绘制。
图18-9 指定绘制范围
参考图18-9。视角参数决定OAB平面和OCD平面之间的内容需要绘制。这样给出Z轴上的任一点都可以计算出该点所在的XY平面上Y的最大值和最小值。而纵横比结合视角可以决定平面OAD和OBC之间的内容需要绘制。这样给出Z轴上的任一点都可以计算出该点所在的XY平面上X的最大值和最小值。近点确定了平面abcd之后的内容需要绘制,而远点确定了平面ABCD之前的内容需要绘制。近点和远点决定了Z轴上的值的最大值和最小值。
可以看到,通过视角,纵横比,近点和远点可以确定一个六面体,在该六面体内的模型是需要被绘制的。
相关文章推荐
- 在BlackBerry上使用OpenGL绘图(三):OpenGL样例结构分析
- 在BlackBerry上使用OpenGL绘图(十一):纹理数组
- 在BlackBerry上使用OpenGL绘图(四):顶点数组与法向量数组
- 在BlackBerry上使用OpenGL绘图(十二):光照
- 在BlackBerry上使用OpenGL绘图(八):模型的运动
- 在BlackBerry上使用OpenGL绘图(汇总)
- 在BlackBerry上使用OpenGL绘图(五):动画的产生
- 在BlackBerry上使用 OpenGL绘图(一): OpenGL介绍
- 在BlackBerry上使用OpenGL绘图(六):3D变换介绍
- 在BlackBerry上使用OpenGL绘图(十):视口变换
- 在BlackBerry上使用OpenGL绘图(七):视图变换:观察点的运动
- 在BlackBerry上使用OpenGL绘图(二):运行OpenGL样例
- [精通iOS开发(第5版)]第16章 使用Quartz和OpenGL绘图 笔记
- iOS 使用Quartz和OpenGL绘图
- MFC的对话框中使用OpenGL绘图
- 在VS2010里MFC对话框中使用OpenGL绘图,添加的控件不显示的一种解决方法
- OpenGL基本概念入门2——使用OpenGL绘图
- Delphi使用OpenGL2d绘图之画图片Bmp的方法
- opengl非全屏绘图的简单使用总结
- 混合语言编程―C#使用原生的Directx和OpenGL绘图的方法