欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

opengl学习笔记系列三

程序员文章站 2022-05-20 20:52:09
...
opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 

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

坐标裁剪

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

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

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

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


opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 


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

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

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

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

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

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

opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 




下图是视口小于窗口的情况,我们只使用的窗口的一角来绘制裁剪区域。
opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 



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

投影

不管你在屏幕上看到的物体多么的具有立体感,屏幕实际上只是二维的。那么,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
  • opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 
  • 大小: 7.1 KB
  • opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 
  • 大小: 5.7 KB
  • opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 
  • 大小: 8.9 KB
  • opengl学习笔记系列三
            
    
    博客分类: opengl学习总结 opengl  坐标系统 
  • 大小: 8.4 KB