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

顶点的法线变换

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

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

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

相关推荐

    DIRECTX.9.0.3D游戏开发编程基础.pdf

    11.2.4 生成顶点法线 11.3 渐进网格 11.3.1 生成渐进网格 11.3.2 顶点属性权值 11.3.3 ID3DXPMesh接口方法 11.3.4 例程:Progressive Mesh 11.4 外接体 11.4.1 一些新的特殊常量 11.4.2 外接体的类型 ...

    DirectX函数总结

    从微软框架到游戏特效等,里面涉及的常用函数都解释了WORLD可跟中 ...根据D3D提供的灵活顶点格式,就可以定义自己的顶点结构体,例如,定义一个包含经过变换的坐标信息和漫反射颜色信息的顶点结构如下:

    Introduction to 3D Game Programming with DirectX 9.0

    11.2.4 生成顶点法线 180 11.3 渐进网格 181 11.3.1 生成渐进网格 182 11.3.2 顶点属性权值 183 11.3.3 ID3DXPMesh接口方法 183 11.3.4 例程:Progressive Mesh 184 11.4 外接体 187 11.4.1 一些新的特殊...

    控制台3D光栅器源码及文档 - 使用字符为像素的2D绘图板及3D渲染器

    OBJ 格式文件的简单解析( 顶点及法线) 使用四元数旋转实现了第一人称及第三人称摄像机 采用了透视投影完成了顶点变换并使用了基于视线的背向面剔除及扫描线Z-BUFFER 进行消隐,支持2 倍全屏超采样 实现数学库包括...

    OpenGL编程指南.pdf

    1.5.3基于顶点的操作 1.5.4图元装配 1.5.5像素操作 1.5.6纹理装配 1.5.7光栅化 1.5.8片断操作 1.6与OpenGL相关的函数库 1.6.1包含文件 1.6.2GLUT,OpenGL实用工具包 1.7动画 1.7.1暂停刷新 1.7.2动画=重绘+交换 第2...

    mikktspace-wasm:使用Web AssemblyJavaScriptTypeScriptNode.js的MikkTSpace顶点切线计算

    因此,为了反转法线的原始捕获场,用于解码的变换必须与用于编码的变换完全相反。 —莫滕·S·米克森 当法线贴图渲染不正确,变形或意外倒置的插入和拉伸时,可能是造成这种误解的原因。 大多数法线贴图贝克使用...

    shady:用于渲染 GLSL 着色器的 CLI 工具

    但它不是从顶点着色器接收顶点、法线和变换信息,而是定义自己的形状算法。 着色器支持的最佳格式/环境是 Shadertoy.com 的格式/环境。 例子: void mainImage(out vec4 fragColor, in vec2 fragCoord) { vec2 ...

    第2章-图形渲染管线-2.3-几何处理1

    变换和视图变换都可以用4×4矩阵来实现,这是第4章的主题。但是,重要的是要意识到可以以程序员喜欢的任何方式计算顶点的位置和法线。图2.4. 在左图中,自上而下的

    DirectX9 3D游戏设计入门 英文版+中文版+源代码

    5.3 顶点法线\t 5.4 光源\t 5.5 例程:光照 5.6 一些附加例程\t 5.7 小结\t 第6章 纹理映射 6.1 纹理坐标\t 6.2 创建并启用纹理\t 6.3 纹理过滤器 6.4 多级渐进纹理 6.5 寻址模式 6.6 例程:纹理四边形 6.7 小结\t ...

    渲染流水线1

    cpu从硬盘中读取数据到内存中,将渲染数据(法线,纹理坐标,顶点颜色等)发送给gpu,即调用一次dc几何阶段顶点着色器:坐标变换(从模型空间转到齐次裁剪空间)和

    Android 4游戏编程入门经典

     11.3.4 opengl es中如何对光照过程进行运算:顶点法线  11.3.5 实践  11.3.6 关于opengl es中光照应用的一些建议  11.4 材质变换(mipmapping)  11.5 简单的照相机  11.5.1 第一人称照相机或欧拉照相机  ...

    android游戏编程入门

     法线 442  11.3.5 实践 443  11.3.6 关于OpenGL ES中光照  应用的一些建议 456  11.4 材质变换(Mipmapping) 456  11.5 简单的照相机 460  11.5.1 第一人称照相机或欧拉  照相机 460  11.5.2 一个欧拉...

    OpenGL ES 3.0

    此外,我们还说明了在顶点上进行坐标变换的方法,并简单介绍了OpenGL ES 3.0管线的光栅化阶段。  第8章——顶点着色器  我们所介绍的管线的下一部分是顶点着色器。第8章概述了顶点着色器如何融入管线以及OpenGL ES...

    [游戏开发] 千锋Unity游戏开发高级教程之图形学 [MP4]

    11.09shader2.0矩阵变换 12.10shader2.0 波-动 13.11河流效果 14.12loading 15.17Alpha测试 16.18模板测试 17.19深度缓存193 B' Y5 z. ]* {+ f 18.20深度测试实战 19.21Blend0 j9 Q6 z5 Z/ a) X5 H! } 20.22Render...

    WebGL编程指南压缩包

    法线:表面的朝向 288 示例程序(LightedCube.js) 291 环境光下的漫反射 296 示例程序(LightedCube_ambient.js) 298 运动物体的光照效果 299 魔法矩阵:逆转置矩阵 301 示例程序...

    WebGL编程指南

    法线:表面的朝向 288 示例程序(LightedCube.js) 291 环境光下的漫反射 296 示例程序(LightedCube_ambient.js) 298 运动物体的光照效果 299 魔法矩阵:逆转置矩阵 301 示例程序...

    webgl编程指南及源码1/2

    法线:表面的朝向 288 示例程序(LightedCube.js) 291 环境光下的漫反射 296 示例程序(LightedCube_ambient.js) 298 运动物体的光照效果 299 魔法矩阵:逆转置矩阵 301 示例程序...

    webgl编程指南及源码2/2

    法线:表面的朝向 288 示例程序(LightedCube.js) 291 环境光下的漫反射 296 示例程序(LightedCube_ambient.js) 298 运动物体的光照效果 299 魔法矩阵:逆转置矩阵 301 示例程序...

Global site tag (gtag.js) - Google Analytics