天行健 君子当自强而不息

■ 3D Math Basis

3D图形数学
     摘要: 我们将讨论渲染一幅带有基本光照的单个图像的大体过程,这里不考虑动画和全局光照,如阴影和辐射度。

此外,注意这里只从概念上讲解通过图形管道的数据流,其顺序并不是固定的。实践中,我们也许会为了性能的优化而并行或乱序执行一些任务。比如,考虑到不同的渲染API,我们可能首先变换和照明所有顶点,然后才进一步的处理(进行裁剪和剔除),或者会并行处理二者,也可能在背面剔除之后再进行光照会得到更高效率。  阅读全文

posted @ 2008-03-11 10:25 lovedday 阅读(2989) | 评论 (0)  编辑

三角网格
     摘要: 最简单的情形,多边形网格不过是一个多边形列表;三角网格就是全部由三角形组成的多边形网格。多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑、车辆、人体,当然还有茶壶等。

当然,任意多边形网格都能转换成三角网格,三角网格以其简单性而吸引人,相对于一般多边形网格,许多操作对三角网格更容易。   阅读全文

posted @ 2008-03-04 10:34 lovedday 阅读(2698) | 评论 (0)  编辑

几何检测
     摘要: 考虑2D中的直线L,L由所有满足p . n = d的点p组成。

其中n是单位向量,我们的目标是对任意点q,找出直线L上距q距离最短的点q',它是q投影到L上的结果。让我们画一条经过q平行于L的辅助线 M,如图13.1所示。设nM和dM分别为直线方程的法向量和d值。因为L和M平行,所以它们的法向量相等:nM=n。又因为q在M上,所以dM为 q.n。   阅读全文

posted @ 2008-02-28 11:51 lovedday 阅读(1451) | 评论 (1)  编辑

3D几何图元
     摘要: 通过定义一个布尔函数f(x, y , z),我们能够隐式表示一个图元。如果所指定的点在这个图元上,这个布尔函数就为真;对于其他的点,这个布尔函数为假。例如等式:

x2+y2+z2 = 1

对中心在原点的单位球表面上的所有点为真,隐式表示法用于测试图元是否包含某点时非常有用。  阅读全文

posted @ 2008-02-25 17:53 lovedday 阅读(3315) | 评论 (0)  编辑

3D中的方位和角位移的C++实现
     摘要: 处理变换是一件非常令人头疼的事,矩阵更是棘手。如果你曾经编写过关于矩阵的代码并且没有用设计良好的类,你会发现经常要处理负号、转置矩阵或翻转连接顺序以使其能正常工作。

下面这几个类正是为了消除在编程中经常遇到的这类问题而设计的。例如,很少需要直接访问矩阵或四元数中的元素,因此特意限制了可用操作的数目以避免产生迷惑,再如,对cRotationMatrix类,没有求逆和连接操作,因为如果按其本身的目的使用cRotationMatrix,这些操作是不应该出现或没有意义的。   阅读全文

posted @ 2008-02-19 19:46 lovedday 阅读(1498) | 评论 (1)  编辑

3D中的方位和角位移
     摘要: 直观地说,我们知道物体的“方位”主要描述的是物体的朝向。然而“方向”和“方位”并不完全一样。向量有“方向”但没有“方位”,区别在于,当一个向量指向特定方向时,可以让向量自转(如图10.1所示),但向量(或者说它的方向)却不会有任何变化,因为向量的属性只有“大小”,而没有“厚度”和“宽度”。   阅读全文

posted @ 2008-02-16 12:52 lovedday 阅读(2212) | 评论 (0)  编辑

3D数学 ---- 矩阵的更多知识
     摘要: 在任意方阵中都存在一个标量,称作该方阵的行列式。

方阵M的行列式记作|M|或“det M”,非方阵矩阵的行列式是未定义的。n x n阶矩阵的行列式定义非常复杂,让我们先从2 x 2,3 x 3矩阵开始。   阅读全文

posted @ 2008-01-16 19:06 lovedday 阅读(1933) | 评论 (0)  编辑

3D数学 ---- 矩阵和线性变换
     摘要: 包含平移的线性变换称作仿射变换,3D中的仿射变换不能用 3 x 3 矩阵表达,必须使用4 x 4矩阵。

一般来说,变换物体相当于以相反的量变换描述这个物体的坐标系。当有多个变换时,则需要以相反的顺序变换相反的量。例如,将物体顺时针旋转20度,扩大200%,等价于将坐标系缩小200%,再逆时针旋转20度。   阅读全文

posted @ 2008-01-14 19:11 lovedday 阅读(2401) | 评论 (0)  编辑

3D数学 ---- 矩阵的几何解释
     摘要: 一般来说,方阵能描述任意线性变换。线性变换保留了直线和平行线,但原点没有移动。线性变换保留直线的同时,其他的几何性质如长度、角度、面积和体积可能被变换改变了。从非技术意义上说,线性变换可能“拉伸”坐标系,但不会“弯曲”或“卷折”坐标系。  阅读全文

posted @ 2008-01-09 17:16 lovedday 阅读(14174) | 评论 (6)  编辑

3D数学 --- 矩阵篇
     摘要: 矩阵的维度被定义为它包含了多少行多少列,一个 r x c 矩阵有r行c列。用黑体大写字母表示矩阵,如:M、A、R。需要引用矩阵的分量时,采用下标法,常使用对应的斜体小写字母,如下面的3 x 3矩阵所示:  阅读全文

posted @ 2008-01-09 15:39 lovedday 阅读(3975) | 评论 (3)  编辑

一个3D向量类
     摘要: 提供以下基本操作:

1. 存取向量的各分量(x, y , z)
2. 向量间的赋值操作
3. 比较两向量是否相同
4. 将向量置为零向量
5. 向量求负
6. 求向量的模
7. 向量与标量的乘除法
8. 向量标准化
9. 向量加减法
10. 计算两点(点用向量表示)间距离
11. 向量点乘
12. 向量叉乘

该向量的操作运算对3D点同样适合。  阅读全文

posted @ 2008-01-08 21:58 lovedday 阅读(1934) | 评论 (0)  编辑

向量的点积和叉积定义
     摘要: 向量的点积:

假设向量u(ux, uy)和v(vx, vy),u和v之间的夹角为α,从三角形的边角关系等式出发,可作出如下简单推导:

|u - v| * |u - v| = |u| * |u| + |v| * |v| - 2 * |u| * |v| * cosα
  阅读全文

posted @ 2007-04-26 18:34 lovedday 阅读(18960) | 评论 (6)  编辑

公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论