opengl学习笔记系列三
程序员文章站
2022-05-20 20:48:39
...
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
推荐阅读
-
【学习笔记】第三方登录之GitHub篇
-
php学习笔记 php中面向对象三大特性之一[封装性]的应用
-
angularjs学习笔记之三大模块(modal,controller,view)
-
Linux学习笔记(三):磁盘和文件系统管理
-
Linux学习笔记(三):权限管理(文件目录权限、用户权限)
-
pygame学习笔记(2):画点的三种方法和动画实例
-
Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置
-
Python学习笔记【第十五篇】:Python网络编程三ftp案例练习--断点续传
-
Vue.js第三天学习笔记(计算属性computed)
-
Mongodb 学习笔记(三) .net core SDK