3D变换中法向量变换矩阵的推导

原创 2004年06月23日 01:36:00

3D变换中法向量变换矩阵的推导<?XML:NAMESPACE PREFIX = O />

潘李亮 2003-11-23

xheartblue@etang.com

 

在一个3D几何管道中,输入的顶点要经过一系列的变换,最终变换到一个投影空间里来,去掉最后的一个Z-坐标后就是一个规格化的2D的屏幕坐标。变换通常分成两个步骤,一是视图/模型变换(D3D里把这个分开成了两个变换世界变换和视图变换),二是投影变换Project.

当我们不去为一个顶点指定一个法向量的时候,一个多边形的顶点的法向量会由系统自动计算生成,计算的方法是由交成这个顶点的两条边做个叉积(叉积的时候注意叉积的方向),这个步骤通常在变换到视图空间后进行的。所以通常情况下我们是没有必要关心法向量是如何变换到视空间中来的。(为何是视图空间?而不是投影完成后的投影空间?原因是光照等计算都是在需要视图空间中的参数进行的。投影空间中的坐标只是为了裁剪和Z-Test用的)。

那么何时需要我们自己去关心法向量是如何变换的呢?这个谁也说不上来。但是肯定是需要的,比如你自己写一个Vertex Shader的时候,也许你需要用到法向量,这时就需要你用正确的变换方法把它变换到视图空间中来------当然你自己如果要写一个软件渲染器的话……。下面我先来用数学公式严密的推导出变换公式,再来解释一些其他的误区。

假设:我们的Model View变换矩阵为<?XML:NAMESPACE PREFIX = V /> , 为世界空间中的法向量, 为世界空间中的两个顶点,两个顶点所在的平面和 垂直。则我们很快就有如下的关系 ,即 的点积为零。在这里提醒大家一下。点积也可以看做是一种运算。所以我们把它写 ---------1)。( 在这里表示矩阵相乘, 的转置矩阵,下同)。

如果我们标记 变换到视空间中的点和对应的法向量,同理我们也有 --------2

 ----------3

联立 123得:

 

到这里我们已经得到法向量的变换公式为 。其中 Model View变换矩阵。(注意,不要把投影矩阵也乘上去)。

我们在使用法向量变换的时候最大的一个误区就是直接把Model View变换矩阵 当成法向量变换矩阵使用,而且肯定有人还曾经认为这是正确的,他们的理由有两个:一是法向量也是一个Vector。而Vertics表示的也是一个Vector。为什么不是同一个矩阵?二是我用 Model View矩阵去变换法向量的时候,结果看上去的也是正确的。对于第一种理由,我只能告诉你:法向量表示的是一个方向,而顶点表示的是一个位置,是不同的东西。对于第二种理由,主要是大家差不多都忘记了线性代数。如果一个变换矩阵只包含旋转的话,它一定是个正交的矩阵,即: 而且,这时还有 的关系。结合一下可知在一个只包含旋转的变换里。法向量的变换矩阵的确就是Model View矩阵。但是如果变换中包含非正交的因素,如:平移、错切等。那情况就不一样。即使你看到了所谓的正确的结果。那也是近似正确的,至少在理论上,它就是不正确的^_^

 

Reference :

Real-Time Rendering

 

心蓝---潘李亮:2003-12-7完成

Stanly Lee.2003-12-7

Email:xheartblue@etang.com

主页:http://gamehunter.3322.net/xpertsoft/

QQ:81496744   欢迎交流

法线变换详解 和 3D 变换中法向量变换矩阵的推导

3D 变换中法向量变换矩阵的推导潘李亮 2003-11-23 xheartblue@etang.com 在一个 3D 几何管道中,输入的顶点要经过一系列的变换,最终变换到一个投影空间里来,去掉最后的...
  • u012419410
  • u012419410
  • 2014年12月26日 18:14
  • 1999

3D 坐标变换 公式 推导

下面使用行向量: e1=(1,0,0) e2=(0,1,0) e3=(0,0,1) i, j, k是三个线性无关的向量,它们在e1,e2,e3坐标系下的坐标也记作i,j,k i’, j’, ...
  • u010476094
  • u010476094
  • 2016年01月23日 10:13
  • 1231

关于3D坐标变换的数学原理

3D坐标变换被广泛应用,在机器人导航和器械臂控制上我们常常需要变换坐标系,参杂平移和旋转,本文对相关的数学原理做一个梳理。 (1)为了便于理解,首先从1维开始探讨。 )))人在车上走,车在地面上行...
  • sonictl
  • sonictl
  • 2013年04月18日 13:28
  • 2589

DirectX学习笔记(十三):取景变换矩阵计算及3D世界摄像机的原理分析和实现

11
  • lishuzhai
  • lishuzhai
  • 2016年09月24日 14:07
  • 2749

使3D空间中物体朝向和其速度方向一致的旋转矩阵计算方案

图像与几何算法
  • vily_lei
  • vily_lei
  • 2015年04月30日 18:00
  • 673

向量点乘相关公式推导

1.向量点乘公式推导和几何解释 01.向量点乘(dot product)是其各个分量乘积的和,公式: 用连加号写: 02.几何解释: 点乘的结果是一个标量,等于向量大小与夹...
  • L_Andy
  • L_Andy
  • 2016年08月18日 15:28
  • 4107

向量点乘公式推导和几何解释

转载于 http://blog.csdn.net/zsq306650083/article/details/8772128 1.向量点乘公式推导和几何解释 01.向量点乘(dot produ...
  • u012419410
  • u012419410
  • 2014年12月11日 17:07
  • 2463

支持向量机SVM推导及求解过程

支持向量机是属于原创性(非组合)的具有明显直观几何意义的分类算法,具有较高的准确率。        使用SVM算法的思路:(1)简单情况,线性可分情况,把问题转化为一个凸优化问题,可以用拉格朗日乘子法...
  • American199062
  • American199062
  • 2016年05月05日 14:42
  • 10508

漫步数理统计二十一——变换:随机向量

前面的文章中提到,两个连续型随机变量的两个函数联合pdf 的行列式基本上是数学分析中处理二重积分变换变换时一个定理的推论,这个定理自然可以扩展到nn重积分,考虑nn维空间S\textbf{S}的子集A...
  • u010182633
  • u010182633
  • 2017年04月20日 20:56
  • 227

3D图形:坐标变换

详细讲解坐标变换的基本原理
  • i_dovelemon
  • i_dovelemon
  • 2014年08月07日 20:30
  • 5260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3D变换中法向量变换矩阵的推导
举报原因:
原因补充:

(最多只允许输入30个字)