博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【OpenGL】法线变换详解(Normal Transform)[转]
阅读量:7096 次
发布时间:2019-06-28

本文共 732 字,大约阅读时间需要 2 分钟。

http://blog.csdn.net/xiajun07061225/article/details/7762711

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

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

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

转载于:https://www.cnblogs.com/freebird92/p/3656375.html

你可能感兴趣的文章
[NodeJs系列]NodeJs模块机制
查看>>
从前端角度理解缓存
查看>>
rook使用教程,快速编排ceph
查看>>
「读懂源码系列1」还在恐惧读源码?看完这篇就不怕了
查看>>
【zzzmh个人博客】一枚Java程序的个人建站之路 (干货)
查看>>
进入docker的世界
查看>>
轻量级内存计算引擎
查看>>
边缘计算 VS 云计算,谁才是未来
查看>>
Laravel5.4 升级到 5.6
查看>>
从javascript到python(一):基本环境搭建
查看>>
[LeetCode] 797. All Paths From Source to Target
查看>>
Jenkins 用户文档(使用Maven构建Java应用程序)
查看>>
ReactNative入门教程-项目结构解析及HelloWorld
查看>>
ECMAScript 2015(ES6)有用的提示与技巧
查看>>
JavaScript是如何工作的:Web Workers的构建块+ 5个使用他们的场景
查看>>
leetcode讲解--589. N-ary Tree Preorder Traversal
查看>>
NodeJS 服务器数据处理(表单、json 字符串和普通字符串)
查看>>
Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
查看>>
数据结构和算法之——散列表中
查看>>
如何创建并发布一个 vue 组件
查看>>