`
helloandroid
  • 浏览: 272352 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
107f8db3-b009-3b79-938a-dafddb49ea79
Android腾讯微博客户...
浏览量:94494
社区版块
存档分类
最新评论

opengl学习笔记系列三

阅读更多


z轴同时垂直于x轴和y轴,它代表一条从屏幕的中心朝向读者的直线。3D笛卡尔坐标系在后面也被我们称作逻辑坐标系。

坐标裁剪

计算机的窗口是按照像素为单位进行量度的。你要在窗口中绘制你的物体,就需要告诉OpenGL如何把逻辑坐标系翻译成屏幕坐标系。

通过指定占据窗口的笛卡尔空间的区域来完成这个任务,这个区域被成为裁剪区域。

换句话说,笛卡尔空间(逻辑坐标)是无限大的,而我们的窗口(屏幕)大小是一定的,或者是800*600,或者是1024*768,我们不可能,也没必要将笛卡尔空间全部的显示在屏幕上,因此,只需要在逻辑坐标中指定出一个裁剪区域,只在屏幕上显示这个区域就可以了。

在二维空间中,裁剪区域就是窗口内最大和最小的x、y值。下图显示了两种常见的裁剪区域





左边这种是坐标原点在窗口左下方,y向上增量,x向右增量。右边这种是原点在窗口中央。

视口:把逻辑坐标映射到窗口坐标

裁剪区域的尺寸很少能刚好和窗口的尺寸相匹配,因此,逻辑坐标必须要通过某种方式映射到屏幕像素坐标。这种映射通过一种叫“视口”viewport的设置来完成。

视口就是窗口内部用于绘制裁剪区域的客户区域。

换句话说,我的窗口,不一定全部用来画我指定的裁剪区域,我可以只使用这个窗口的一部分大小来绘制我的裁剪区域。当然,一般来说视口是被指定成整个窗口大小。

下图显示的就是视口被指定为整个窗口大小。裁剪区域的大小是150*100,窗口的大小是300*200,所以逻辑坐标的1格单位与物理坐标(像素)的2格单位相匹配。






下图是视口小于窗口的情况,我们只使用的窗口的一角来绘制裁剪区域。




当然,你也可以把视口设置成大于窗口的尺寸,这样,窗口只能绘制出裁剪区域的一部分,物体就好像被放大了一样。

投影

不管你在屏幕上看到的物体多么的具有立体感,屏幕实际上只是二维的。那么,OpenGL是如何做到这点的呢,答案就是“三角法与简单的矩阵操作”(所谓“简单”只是老外的幽默)。如果想要真正的搞懂这块内容,大学的线性代数可能会对你有帮助,当然,如果你是数学专业的话。

1、正投影

就是不管远近,所有实际大小相同的物体,在屏幕上也会有相同的大小。如果你会3D MAX的话,MAX的User视图、TOP视图、LEFT视图、RIGHT视图、FRONT视图等等都是正投影的典范。

如果你还不能理解的话,打开《传奇》游戏(或类似的2D游戏),它的场景姑且就可以叫做“正投影”。

2、透视投影

简单的说就是近大远小,3D MAX的perspective视图就是此类,或者你打开《魔兽世界》看看……

转自http://hi.baidu.com/%B6%A8%B7%E7%B2%A82005/blog/item/2522edee78867d21adafd552.html
  • 大小: 7.1 KB
  • 大小: 5.7 KB
  • 大小: 8.9 KB
  • 大小: 8.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics