2009-12-22 17:34
《三维图形成象的基本原理》
DDM君/Furry, Flab3D.com (允许转载,转载请注明)
一个三维模型/场景要成像和运动在屏幕上,至少需要下面的要素。数学苦手或者完全没接触过的朋友不用怕,了解一下先,具体的计算法我们会在以后的教程中一一说明。
模型和贴图:
三个点连接成一个三角形,很多三角形组成一个模型。
贴图就是模型的每个点(x,y,z)对应的一个平面的(u,v),u,v也就是平面位图的x,y,只不过点用了x,y了,怕重复而已。
Flash3d里面的贴图就是根据每个三角形的不同斜度,和每个点对应的UV计算出beginBitmapFill的第二个矩阵参数(matrix)来用位图填充三角形。
运动:
对于初接触图形数学的朋友,下面的道理(二维,三维图形都是这样的道理,只不过三维多一个Z轴)一定会让你吃一惊。
所有我们以为在动的点/模型其实都没有动(相对坐标系),运动的只是坐标系而已。移动,旋转,放大,透视全是同一个原理,不过是在移动,旋转,放大,透视这些点/模型所在的坐标系而已。
所谓摄像机的各种运动根本就是浮云。摄像机绕Y顺时针拍摄,只不过是模型的坐标系在绕Y逆时针转而已。
所有点的任何变动都是一个点(x,y,z)乘以一个矩阵得到的。就这么简单。
千万不要听到这个就吓跑了,我们不需要去仔细研究什么是矩阵,我们只要知道怎么用就行了。而且也根本不需要我们自己去计算,数学算法类flash3d的引擎都是写好了的。
一个东西要动,不管是二维还是三维,就必须得要它的每个点都乘以某个矩阵,这是逃不掉的。
‘投射’在屏幕上
虽说是‘三维’,但实际上我们还是从二维平面的屏幕上观看的。所以我们必须要把三维的点(x,y,z),变成只有(x,y)的点显示在平面的电脑屏幕上。形象一点可以说三维点的显示就是这个点‘投影’在平面的画布上。
有些朋友会说,我直接把x,y,z的z值去掉不就行了。是的,直接去掉我们就能得到一个(x,y)的点,但是这样投影下来图形没有近大远小的变化,看起来稍稍有点奇怪。
于是我们就有了‘透视投影’,算法是用x,y除以某个和Z有关的值w来得到一个近大远小的透视后的(x,y),这才是我们平常看到最正常近大远小的三维图像。
图形学的原理是读懂flash3d各种引擎核心内容的基础的基础,只有了解这样的知识后,读引擎源代码才有意义,以后才能慢慢加入写引擎代码的行列,否则只会迷失在代码的海洋中(有时会吐=A=)。 让我们一起迈出这第一步吧,加油!