没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
OpenGL 图形管线和坐标变换
Zhulin
引言
学习计算机图形学首先要搞清楚计算机图形渲染管线。当今两大图形 API,OpenGL 和 Direct3D 都有
自己的渲染管线。但是对于刚刚接触计算机图形学的同学来说,“图形管线”这个抽象的概念很是不好理解。
在 CSDN 论坛中也看到很多同学问到有关于管线的问题。比如:屏幕坐标是怎么转换成世界坐标的等等。似
乎这个问题是刚接触计算机图形学必问的问题。国内 OpenGL 的教科书很少,国外这类书虽然多,但是也许
是我们和老外思维方式的不同,有的内容不好理解。所以我特别写了这篇教学来为大家解释在 OpenGL 中,
它的渲染管线是什么样的,以及渲染管线是如何在程序中反映出来的,最后再详细讲一下屏幕坐标是怎样
转换成世界坐标的。希望这篇教学对大家在今后的学习中有所帮助。如果发现该教程中有什么错误或有什
么好的建议,请发送到我的邮箱 zhulinpptor@gmail.com.
也可以浏览本人的博客 http://blog.csdn.net/zhulinpptor.
1. OpenGL 渲染管线
OpenGL 渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Pr
ojection Transformation)。做个比喻,计算机图形开发就像我们照相一样,目的就是把真实的场景
在一张照相纸上表现出来。那么观测变换的过程就像是我们摆设相机的位置,选择好要照的物体,摆好物
体的造型。而投影变换就像相机把真实的三维场景显示在相纸上一样。下面就分别详细的讲一下这两个过
程。
1.1 模型观测变换
让我们先来弄清楚 OpenGL 中的渲染管线。管线是一个抽象的概念,之所以称之为管线是因为显卡在
处理数据的时候是按照一个固定的顺序来的,而且严格按照这个顺序。就像水从一根管子的一端流到另一
端,这个顺序是不能打破的。先来看看下面的图 1:
图 1 OPENGL 渲染管线
图中显示了 OpenGL 图形管线的主要部分,也是我们在进行图形编程的时候常常要用到的部分。一个顶点
数据从图的左上角(MC)进入管线,最后从图的右下角(DC)输出。MC 是 Model Coordinate 的简写,
表示模型坐标。DC 是 Device Coordinate 的简写,表示设备坐标。当然 DC 有很多了,什么显示器,
打印机等等。这里 DC 我们就理解成常说的屏幕坐标好了。MC 当然就是 3D 坐标了(注意:我说的 3D 坐
标,而不是世界坐标),这个 3D 坐标就是模型坐标,也说成本地坐标(相对于世界坐标)。MC 要经过模型
变换(Modeling Transformation)才变换到世界坐标,图 2:
图 2 世界坐标系和模型坐标系
变换到世界坐标 WC(World Coordinate)说简单点就是如何用世界坐标系来表示本地坐标系中的坐标。
为了讲得更清楚一些,这里举个 2D 的例子。如图 3:
图 3 世界坐标系和模型坐标系的计算
图中红色坐标系是世界坐标系 WC,绿色的是模型坐标系 MC。现在有一个顶点,在模型坐标系中的坐标
为(1,1),现在要把这个模型坐标转换到世界坐标中来表示。从图中可以看出,点(1,1)在世界坐标系中的
坐标为(3,4),现在我们来通过计算得到我们希望的结果。首先我们要把模型坐标系 MC 在世界坐标系中表
示出来,使用齐次坐标(Homogeneous Coordinate )可以表示为矩阵(注意,本教程中使用的矩阵都
是以列向量组成):
其中,矩阵的第一列为 MC 中 x 轴在 WC 中的向量表示,第二列为 MC 中 y 轴 WC 中的向量表示,第三
列为 MC 中的原点在 WC 中的坐标。对齐次坐标系不了解的同学,请先学习游戏数学方面的知识。有了这
个模型变换矩阵后,用这个矩阵乘以在 MC 中表示的坐标就可以得到该坐标在世界坐标系中的坐标。所以
该矩阵和 MC 中的坐标(1,1)相乘有:
剩余14页未读,继续阅读
资源评论
- zhd2007zhd2013-10-14很有用的资源。其他网站上也有,但不是PDF格式的。 谢谢
- yeren01432012-12-19很有用,写的很清楚
- wawj5225272014-03-19感谢楼主的分享,很感谢,谢谢!
- mind12892015-01-16感谢楼主的分享,很感谢,谢谢!
pptor
- 粉丝: 127
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功