【OpenGL】法线变换详解(Normal Transform)[转]
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
即:应用于法线向量的变换矩阵是顶点变换矩阵的逆转置矩阵。
【OpenGL】法线变换详解(Normal Transform)[转]的更多相关文章
- 第98天:CSS3中transform变换详解
		transform变换详解 本文主要介绍变形transform. Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放sc ... 
- # OpenGL常用函数详解(持续更新)
		OpenGL常用函数详解(持续更新) 初始化 void glutInit(int* argc,char** argv)初始化GULT库,对应main函数的两个参数 void gultInitWindo ... 
- OpenGL一些函数详解(二)
		OpenGL ES顶点数据绘制技巧 在OpenGL中,绘制一个长方体,需要将每个顶点的坐标放在一个数组中.保存坐标时有一些技巧(由于字母下标不好表示,因此将下标表示为单引号,如A1将在后文中表示为A' ... 
- matlab-霍夫变换详解(判断正方形长方形)
		霍夫变换 霍夫变换是1972年提出来的,最开始就是用来在图像中过检测直线,后来扩展能检测圆.曲线等. 直线的霍夫变换就是 把xy空间的直线 换成成 另一空间的点.就是直线和点的互换. 我们在初中数学中 ... 
- OpenGL ES入门详解
		http://blog.csdn.net/wangyuchun_799/article/details/7736928 1.决定你要支持的OpenGL ES的版本.目前,OpenGL ES包含1.1 ... 
- CSS3详解:transform
		CSS3 transform是什么? transform的含义是:改变,使…变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ... 
- CSS3详解:transform、transition
		CSS3 transform是什么? transform的含义是:改变,使-变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ... 
- CSS动画详解及transform、transition、translate的区别
		刚看完一节慕课网的css动画,在此总结下 1. 先说下 transform.transition.translate的区别 transform 和 transition是css的2个属性,transl ... 
- FOC中的Clarke变换和Park变换详解(动图+推导+仿真+附件代码)
		文章目录 1 前言 2 自然坐标系ABC 3 αβ\alpha\betaαβ 坐标系 3.1 Clarke变换 3.2 Clarke反变换 4 dqdqdq 坐标系 4.1 Park变换 正转 反转 ... 
随机推荐
- Java  正则表达式  向前、向后匹配
			//向后匹配 String a = "I paid $90 for 10 oranges, 12 pears and 8 apples. I saved $5 on "; Patt ... 
- [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架
			第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ... 
- Akumuli时间序列数据库——列存储,LSM,MVCC
			Features Column-oriented time-series database. Log-structured append-only B+tree with multiversion c ... 
- 在现有 SharePoint 服务器上安装 PowerPivot for SharePoint
			步骤1: 检查 SQL Server 2008 R2 Analysis Services 实例的“程序”文件夹.如果您找到了现有安装或之前安装的证据,则执行剩余步骤.否则,直接执行步骤 2:安装 Po ... 
- GL10控制图形旋转
			GL10提供了glRotatef(float angle , float x , float y , float z)方法,该方法用于控制旋转,该方法种angle控制旋转角度:而x.y.z参 ... 
- bzoj 2127: happiness
			#include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf ... 
- jsp中JavaBean的用法
			UserRegisterBean.java:这是JavaBean package JavaBean; public class UserRegisterBean { private String us ... 
- dx wpf的各种坑
			这篇随笔总结dx wpf使用中的各种坑,持续更新~ LookUpEdit里内嵌的DXGrid的名字必须是"PART_GridControl",不能不写.也不能写错.我对比了2个小时 ... 
- superobject中 JavaToDelphiDateTime的使用
			procedure TForm1.FormCreate(Sender: TObject); var n: TDateTime; i64: Int64; s: Integer; begin Memo1. ... 
- 基于K2 BPM的大型连锁企业开关店选址管理解决方案
			业内有句名言:“门店最重要的是什么?第一是选址,第二是选址,第三还是选址” 选址是一个很复杂的综合性商业决策过程,需要定性考虑和定向分析.K2开关店&选址管理方案重点关注:如何开出更好的店?在 ... 
