在图形学中,同样的一个模型视图变换矩阵可以用来变换点、线、多边形以及其它几何体,也可以变换多边形表面的切向量。比如:
posEyeSpace = ModelViewMatrix * posModelSpace。
但是,同样的方式通常却不能够用于法线的变换(注意:在有些情况下是可以的)。
一、法线和顶点坐标的区别
顶点坐标<x,y,z>表示缺省的<x,y,z,1>,而法线向量的<x,y,z>表示缺省的<x,y,z,0>。
法线向量只能保证方向的一致性,而不能保证位置的一致性。
下面我们通过一个例子来看看问题所在。
上图是针对一个多边形以及一条边上的法线进行缩放变换:X轴上缩放为原来的0.5倍。左边是变换前的状态,中间是将同样的模型变换矩阵应用在法线上的结果,显然是错的,法线并不垂直于切线。最右边的图是正确的结果。
二、法线变换:应该用变换矩阵的逆转置矩阵
假设Model space中的某条切线向量是T,法线向量是N。那么由他们是垂直的可得到:TTN=0
假设他们变换到Eye space中后分别是T'和N'。那么他们应该仍然是相互垂直的:T’TN’=0
假设切线向量和法线的变换矩阵为M、G。则有:(MT)T(GN)=0
进一步推出:TTMTGN=0
由于TTN=0,因此我们猜想MTG=0.因此:《注:我觉得这里该写 MTG=E. E:为单位矩阵》
G=(M-1)T
即:应用于法线向量的变换矩阵是顶点变换矩阵的逆转置矩阵。
分享到:
相关推荐
在.NET中,可以创建一个骨骼树,并通过矩阵乘法应用骨骼变换来影响顶点的位置,从而实现动画效果。 最后,表面材质定义了模型在光照下的视觉特性,如颜色、透明度、纹理等。在修改顶点和法线后,原有的材质属性可能...
3. **法线变换**:由于法线贴图中的法线是相对于纹理坐标的,因此在片段着色器中,需要使用纹理坐标和UV偏移来获取正确的法线向量。之后,需要将这些法线从纹理坐标空间转换到对象空间,再转换到世界空间,最后转换...
在此过程中,法线也需要进行相应的变换,通常使用模型视图矩阵的逆转置来保持法线的方向正确。 片段着色器是实现法线贴图的关键部分。在这里,你需要从纹理中采样得到法线向量,并将其从纹理坐标系转换到归一化设备...
- 这个阶段不仅涉及顶点位置的变换,还包括顶点法线向量、纹理坐标等的变换。 2. **光栅化处理阶段** (Rasterization): - 经过VT&L处理后的顶点被组织成以点、线、面为基础的图元。 - 应用纹理贴图和物体的颜色...
例如,顶点着色器可以处理顶点变换、法线变换和纹理坐标生成,而片断着色器则负责颜色计算、纹理采样和混合。 在OpenGL ES中,我们使用`glBegin`和`glEnd`之间的语句发送顶点数据到顶点处理器,并使用`glColor3f`...
而MatCap则通过将模型的顶点法线(VertexNormalWS)转化为世界空间坐标,并应用一定的变换,来模拟这些复杂的光照效果。 1. 顶点法线(VertexNormalWS):这是模型表面每个顶点的法线向量,它表示了表面相对于世界...
法线向量也需要从物体空间变换到观察空间,这与坐标变换不同,法线变换需要使用GL_MODELVIEW矩阵的逆变换的转置来完成。 裁剪坐标(ClipCoordinates)通过GL_PROJECTION矩阵进行变换,它定义了视锥体(frustum)和...
这个例子特别指出是针对顶点渲染,意味着它的重点在于如何通过Cg编程改变和操作场景中的几何数据,如顶点位置、法线、纹理坐标等。 描述中提到的“VC7环境”指的是使用Visual Studio 2005(版本7.1)作为开发环境。...
顶点着色器处理模型的几何信息,包括顶点位置和法线,可能还需要进行纹理坐标变换。 4. **famen_blinn1_BaseColor.jpg** 和 **famen_blinn1_Normal.jpg**:这两个是纹理图像文件,分别代表基础颜色贴图和法线贴图。...
10. **光照模型与法线变换**:在进行光照计算时,物体的法线也需要进行变换,以确保在不同变换下的光照效果正确。 了解并掌握这些基本的三维变换技术,对于开发图形学相关的应用,如游戏引擎、CAD软件、虚拟现实...
在D3D中,通常会定义结构体来表示顶点,这些顶点包含了位置、颜色、法线、纹理坐标等信息。例如,你可以定义一个如下的顶点结构体: ```cpp struct Vertex { float x, y, z; // 位置 DWORD color; // 颜色 float...
在现代游戏和图形应用程序中,这些指令集被用于处理和变换三维模型的顶点数据,为后续的像素着色阶段提供基础。接下来,我们将深入探讨顶点着色器指令集的原理、功能和应用。 1. 顶点着色器概述: 顶点着色器是GPU...
3. **TBN矩阵**:接下来,构建TBN(切线-副切线-法线)矩阵,这是一个从模型空间到切线空间的变换矩阵。TBN矩阵是通过将归一化的切线、副切线和法线作为列向量组成的3x3矩阵。在C语言中,这可以通过定义一个浮点型...
在OpenSceneGraph(OSG)这样的三维图形库中,顶点访问器允许程序员高效地读取和修改顶点数据,例如位置、颜色、法线等属性。通过顶点访问器,开发者可以方便地实现自定义的几何处理逻辑,如计算包围盒。 ...
3. **法线变换**:将法线贴图的RGB值转换为3D向量,并用这个向量更新每个像素的表面法线。这个变换是在Tangent空间中进行的,以避免视角依赖性。 4. **光照计算**:使用更新后的法线进行光照计算。新的法线向量会...
在实际应用中,顶点着色器接收输入的顶点数据,例如位置、颜色、法线等,然后进行一系列操作,最终输出经过处理的顶点数据。这个过程可以用伪代码表示为: ```cpp for(UINT i = 0; i ; ++i) { outputVertex[i] = ...
顶点着色器通常会处理顶点坐标,而片段着色器则处理颜色和其他表面属性,包括光照计算,这时候就需要法线向量的正确变换。 在光照计算中,法线向量的变换是非常关键的。正常情况下,法线向量需要保持长度不变并保持...
这里 \(n\) 表示顶点的原始法线,\(n'\) 是顶点经过变换后的法线。\((M_i^{-1})^T\) 表示第 \(i\) 个骨骼变换矩阵的逆矩阵的转置。 ##### 3. 切线基计算 对于切线空间的计算,通常采用与法线计算类似的方法。首先...
开发者通常会创建一个顶点结构体,包含位置、法线、纹理坐标等信息,然后定义一个顶点缓冲区,存储立方体的所有顶点。接着,使用D3D的Device对象设置变换矩阵,并调用DrawPrimitive方法渲染立方体。 了解并掌握顶点...