现在的位置: 首页 > 综合 > 正文

图形学思考 – 关于物体位置变换 Translation

2014年03月31日 ⁄ 综合 ⁄ 共 1013字 ⁄ 字号 评论关闭

物体位置变换是图形学的基础

但是其实对于初学者来说其实不是那么容易理解透切的知识。

不信?仔细想想这个问题:计算机到底是如何把一个物体从空间的一个位置移动到另外一个位置的呢?

Translation矩阵很简单:

T = | 1    0    0    0 |

| 0    1    0    0 |

| 0    0    1    0 |

| b1  b2 b3  1 |

如果某物体原位置是(x0, y0, z0, 1)那么变换之后就得到新的位置(x0+b1, y0+b2, z0+b3, 1)

这里不是要解说这个公式,很多图形学书本上都有详细的解析。

我这里要解说前面那个问题。

比如下面的图:

火箭是如何从坐下的位置移动到右上的位置的呢?

因为如上面的translation 公式好像是移动一个点的位置的,但是这个火箭明显由无数个点组成啊?

难倒是火箭的所有点都乘以Translation矩阵?那么计算一个小小的物体的位移岂不是要消耗大量的计算时间?

其实差不多可以这么理解,不过不完全准确。

计算机移动一个物体一般需要两个步骤:

1.  一般是由CPU利用上面的公式计算了新的物体的顶点位置(当然,现在这个工作也可以由GPU来做了)

2.  然后GPU利用新的顶点位置重新在新的位置绘制火箭。

如果认为火箭比较复杂,那么我们看下面图:

一个四方形就比较简单了。

GPU只需要知道四方形的四个顶点信息就可以绘制一个四方形了。那么移动一个四方形的工作就比较简单了。

1 利用Translation矩阵计算新的四个顶点位置信息

2 GPU在新的位置绘制

进一步讨论:为什么上面说不完全准确呢?

因为:

1   CPU(或者GPU)是需要处理所有的物体的点,但是其实这个点不是所有的像素点,而是顶点(vertices),比如这个四方形就只有四个顶点(vertices),而不是所有像素点。

2  GPU重新绘制的速度是非常快的,而且即使不发生位置变换,GPU也需要刷新屏幕的,所以这部分的消耗跟是否发生位置变换无关。

那么位置变换只会增加计算步骤1的消耗,而这个消耗相对现今的计算机来说都不算很费力的事情。

而且实际操作的时候,额外的计算不过是增加一个位置变换矩阵,时间效率为O(1)了,需要的计算消耗是相当小的了。

尤其是现在进入了GPU并行计算时代,这部分内容我也正在深入研究:利用GPU并行计算能力加速图形渲染。

原创:http://blog.csdn.net/kenden23/article/details/20308435

努力,加油。为昆明祈福,中国人民加油!

抱歉!评论已关闭.