在BlackBerry上使用OpenGL绘图(九):投影变换

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轴上的值的最大值和最小值。

可以看到,通过视角,纵横比,近点和远点可以确定一个六面体,在该六面体内的模型是需要被绘制的。
内容概要:本文档是关于C++的基础入门教程,首先介绍了C++的发展背景及其应用领域,强调了它在系统软件、应用软件、游戏开发等领域的广泛应用。接着详细讲述了C++的学习环境搭建,包括不同操作系统的编译器选择(如GCC/G++、Clang、Microsoft Visual C++)和集成开发环境(IDE)推荐。文档通过编写“Hello, World!”程序引导初学者快速上手,并对基本语法进行了讲解,涵盖变量和数据类型、控制结构、函数定义与调用等内容。此外,深入浅出地介绍了面向对象编程的核心概念——类和对象,展示了如何创建和使用类。最后提及了一些进阶特性,如模板、异常处理、STL等,并鼓励读者通过阅读经典书籍和利用网络资源继续深入学习。 适合人群:对编程有一定兴趣但缺乏C++基础知识的初学者,尤其是那些希望通过系统学习掌握这门强大编程语言的人群。 使用场景及目标:①为想要了解或转行进入计算机编程领域的个人提供入门指导;②帮助高校学生更好地理解和掌握课堂上所学的C++理论知识;③为有志于从事系统级编程、游戏开发等领域的求职者打下坚实的基础。 其他说明:此教程旨在为初学者提供一个全面而简洁的C++入门指南,不仅包含了必要的理论知识,还结合了实际代码示例,便于读者边学边练。同时建议读者在学习过程中多动手实践,积极查阅相关资料,以加深理解并提高编程技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值