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   欢迎交流

在delphi中使用flash控件

FLASH是Macromedia公司出品的,用在互联网上动态的、可互动的shockwave。它的优点是体积小,可边下载边播放,这样就避免了用户长时间的等待。    FLASH可以用其生成动画,还可在网...
  • tianhaiyise
  • tianhaiyise
  • 2002-01-04 10:39:00
  • 1014

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

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

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

  • qq960885333
  • qq960885333
  • 2012-12-03 13:01:34
  • 418

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

11
  • lishuzhai
  • lishuzhai
  • 2016-09-24 14:07:11
  • 3033

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:45
  • 1568

图形学中几个变换矩阵的推导

1. 齐次坐标系:4个分量,点的W分量为1,向量的W分量为0 2.平移矩阵,缩放矩阵:http://www.cnblogs.com/melode11/archive/2009/12/19/1...
  • lc19890326
  • lc19890326
  • 2012-03-11 20:27:14
  • 1362

图形学1-三维坐标系间的变换矩阵推导

概要:三维坐标系的变换,实质上则是原点以及正交基向量的变化,在空间中表现为平移和旋转。 如图所示的坐标系变换,可以用一个变换矩阵来表示。 虽然原理也比较简单,但是大一学的线性代数已经有点忘记了。...
  • jc_laoshu
  • jc_laoshu
  • 2017-04-07 20:56:33
  • 4418

顶点法向量的矩阵变换

本文参考 Introduction to 3D Game Programming with DirectX 11在计算机图形学中法向量的变化跟一般顶点的变化有一定的区别,假设我们有一个切向量u=v1−...
  • dengyibing
  • dengyibing
  • 2016-07-16 04:06:38
  • 981

DirectX视口变换矩阵详解(推导ViewportMatrix)

转载:http://www.cnblogs.com/graphics/archive/2009/10/13/1582773.html 视口变换在投影变换之后,视口变换的作用是将投影平面上的点...
  • aa20274270
  • aa20274270
  • 2017-03-25 22:41:56
  • 525

点的变换和法向量的变换

在三维空间里,点的变换是通过仿射变换的,所以使用齐次坐标的变换矩阵来变换。不过,当一个点作矩阵M变换时,这个点的法向量是否也可以使用矩阵M来变换呢?答案是不行,只是在特殊的情况是可以,比如没有变形的变...
  • caimouse
  • caimouse
  • 2017-02-13 17:52:51
  • 645
收藏助手
不良信息举报
您举报文章:3D变换中法向量变换矩阵的推导
举报原因:
原因补充:

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