`
helloandroid
  • 浏览: 275869 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
107f8db3-b009-3b79-938a-dafddb49ea79
Android腾讯微博客户...
浏览量:95738
社区版块
存档分类
最新评论

顶点的法线变换

 
阅读更多
在图形学中,同样的一个模型视图变换矩阵可以用来变换点、线、多边形以及其它几何体,也可以变换多边形表面的切向量。比如:

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

即:应用于法线向量的变换矩阵是顶点变换矩阵的逆转置矩阵。
分享到:
评论

相关推荐

    dotnet-这个例子展示了如何修改顶点位置和重新计算法线蒙皮骨骼动画的表面材质

    在.NET中,可以创建一个骨骼树,并通过矩阵乘法应用骨骼变换来影响顶点的位置,从而实现动画效果。 最后,表面材质定义了模型在光照下的视觉特性,如颜色、透明度、纹理等。在修改顶点和法线后,原有的材质属性可能...

    Normal_mapping.rar_normal_normal mapping_opengl 法线_法线贴图

    3. **法线变换**:由于法线贴图中的法线是相对于纹理坐标的,因此在片段着色器中,需要使用纹理坐标和UV偏移来获取正确的法线向量。之后,需要将这些法线从纹理坐标空间转换到对象空间,再转换到世界空间,最后转换...

    法线贴图normal mapping

    在此过程中,法线也需要进行相应的变换,通常使用模型视图矩阵的逆转置来保持法线的方向正确。 片段着色器是实现法线贴图的关键部分。在这里,你需要从纹理中采样得到法线向量,并将其从纹理坐标系转换到归一化设备...

    Direct3D中的三维坐标变换

    - 这个阶段不仅涉及顶点位置的变换,还包括顶点法线向量、纹理坐标等的变换。 2. **光栅化处理阶段** (Rasterization): - 经过VT&L处理后的顶点被组织成以点、线、面为基础的图元。 - 应用纹理贴图和物体的颜色...

    Android openGL-GLSL_中文推荐.pdf

    例如,顶点着色器可以处理顶点变换、法线变换和纹理坐标生成,而片断着色器则负责颜色计算、纹理采样和混合。 在OpenGL ES中,我们使用`glBegin`和`glEnd`之间的语句发送顶点数据到顶点处理器,并使用`glColor3f`...

    UE4-MatCap原理与实现

    而MatCap则通过将模型的顶点法线(VertexNormalWS)转化为世界空间坐标,并应用一定的变换,来模拟这些复杂的光照效果。 1. 顶点法线(VertexNormalWS):这是模型表面每个顶点的法线向量,它表示了表面相对于世界...

    OpenGL变换翻译.pdf

    法线向量也需要从物体空间变换到观察空间,这与坐标变换不同,法线变换需要使用GL_MODELVIEW矩阵的逆变换的转置来完成。 裁剪坐标(ClipCoordinates)通过GL_PROJECTION矩阵进行变换,它定义了视锥体(frustum)和...

    一个简单的Cg顶点渲染例程

    这个例子特别指出是针对顶点渲染,意味着它的重点在于如何通过Cg编程改变和操作场景中的几何数据,如顶点位置、法线、纹理坐标等。 描述中提到的“VC7环境”指的是使用Visual Studio 2005(版本7.1)作为开发环境。...

    NormalTexture.rar

    顶点着色器处理模型的几何信息,包括顶点位置和法线,可能还需要进行纹理坐标变换。 4. **famen_blinn1_BaseColor.jpg** 和 **famen_blinn1_Normal.jpg**:这两个是纹理图像文件,分别代表基础颜色贴图和法线贴图。...

    图形学 三维变换 TC

    10. **光照模型与法线变换**:在进行光照计算时,物体的法线也需要进行变换,以确保在不同变换下的光照效果正确。 了解并掌握这些基本的三维变换技术,对于开发图形学相关的应用,如游戏引擎、CAD软件、虚拟现实...

    D3D顶点索引绘制椎体并进行纹理贴图

    在D3D中,通常会定义结构体来表示顶点,这些顶点包含了位置、颜色、法线、纹理坐标等信息。例如,你可以定义一个如下的顶点结构体: ```cpp struct Vertex { float x, y, z; // 位置 DWORD color; // 颜色 float...

    Vertex Shader Instructions 顶点着色器指令集

    在现代游戏和图形应用程序中,这些指令集被用于处理和变换三维模型的顶点数据,为后续的像素着色阶段提供基础。接下来,我们将深入探讨顶点着色器指令集的原理、功能和应用。 1. 顶点着色器概述: 顶点着色器是GPU...

    烘焙工具中用于生成法线贴图的切线空间的通用标准_c语言_代码_下载

    3. **TBN矩阵**:接下来,构建TBN(切线-副切线-法线)矩阵,这是一个从模型空间到切线空间的变换矩阵。TBN矩阵是通过将归一化的切线、副切线和法线作为列向量组成的3x3矩阵。在C语言中,这可以通过定义一个浮点型...

    包围盒and顶点访问器

    在OpenSceneGraph(OSG)这样的三维图形库中,顶点访问器允许程序员高效地读取和修改顶点数据,例如位置、颜色、法线等属性。通过顶点访问器,开发者可以方便地实现自定义的几何处理逻辑,如计算包围盒。 ...

    Bump_mapping.rar_ bump mapping_Bump_Mapping_bump_bump mapping

    3. **法线变换**:将法线贴图的RGB值转换为3D向量,并用这个向量更新每个像素的表面法线。这个变换是在Tangent空间中进行的,以避免视角依赖性。 4. **光照计算**:使用更新后的法线进行光照计算。新的法线向量会...

    5.6顶点着色器阶段1

    在实际应用中,顶点着色器接收输入的顶点数据,例如位置、颜色、法线等,然后进行一系列操作,最终输出经过处理的顶点数据。这个过程可以用伪代码表示为: ```cpp for(UINT i = 0; i ; ++i) { outputVertex[i] = ...

    opengl 矩阵变换

    顶点着色器通常会处理顶点坐标,而片段着色器则处理颜色和其他表面属性,包括光照计算,这时候就需要法线向量的正确变换。 在光照计算中,法线向量的变换是非常关键的。正常情况下,法线向量需要保持长度不变并保持...

    骨骼动画原理的文档 pdf

    这里 \(n\) 表示顶点的原始法线,\(n'\) 是顶点经过变换后的法线。\((M_i^{-1})^T\) 表示第 \(i\) 个骨骼变换矩阵的逆矩阵的转置。 ##### 3. 切线基计算 对于切线空间的计算,通常采用与法线计算类似的方法。首先...

    D3D顶点坐标转换实例

    开发者通常会创建一个顶点结构体,包含位置、法线、纹理坐标等信息,然后定义一个顶点缓冲区,存储立方体的所有顶点。接着,使用D3D的Device对象设置变换矩阵,并调用DrawPrimitive方法渲染立方体。 了解并掌握顶点...

Global site tag (gtag.js) - Google Analytics