法线从object space到eye space的转换((normal matrix)
来源:互联网 发布:自己的社会网络 编辑:程序博客网 时间:2024/05/16 14:03
对于顶点来说,从object Space转换到eye space, 使用model-view矩阵就好了.那么顶点的法线是否也可以直接使用model-view矩阵转化?
通常情况下是不行的.
如下两张图是顶点的tangent和normal向量使用m-v矩阵从object space到eye space的变换:
>>>>>>>>>>>>>>>>
可以看到在eye-space中,tangent的方向仍符合定义,normal则不再垂直于tangent了.m-v矩阵不适用于normal.
令T为tangent,MV为model-view矩阵.P1, P2为tangent联系的2个顶点.
T = P2 - P1
T' = T * MV = (P2 - P1) * MV = P2 * MV - P1 * MV = P2' - P1'
因此T'保留了tangent的定义.但对于normal,你也可以找到N=Q2-Q1代表它,但是变换后Q2'-Q1'却不能保证垂直于T'.object space到view space,角度关系被改变了.
如何求出normal的变换,维持与tangent垂直?假设该变换为G.
normal与tangent垂直:
N'.T' = (GN).(MT) = 0
点积转化为叉积:
(GN).(MT) = (GN)T * (MT) = (GN)T(MT) = (NTGT)(MT) = NTGTMT = 0
注意到NTT为0:
若GTM = I,则上式成立.因此G=(M-1)T.
即normal matrix是model-view矩阵的逆矩阵的转置矩阵.
若model-view矩阵是一个正交矩阵,则G=M.这便是例外情况下normal matrix为model-view矩阵.
原文地址http://www.cnblogs.com/flytrace/p/3379816.html
- 法线从object space到eye space的转换((normal matrix)
- 法线从object space到eye space的转换((normal matrix)
- 法线从object space到eye space的转换((normal matrix)
- 从object space 到world space
- 切线空间(tangent space)&法线贴图(normal map)
- 切线空间(Tangent Space)法线映射(Normal Mapping)
- 从X-Space转换到UCenter Home的方法
- 从Model Space到Canonical view volume转换矩阵的计算
- iocrl如何从user space调用到 kernel space,
- Normal Map中的值, Tangent Space, 求算 Tangent 与 Binormal 与 TBN Matrix
- 从msn space到csdn blog
- 从MSN Space到WordPress,从WordPress到CSDN
- space
- space
- Tangent space normal mapping with GLSL
- TangentSpace的法线转换到ViewSpace
- Manage Space for schema object
- vuforia 之 Target space 和 screen space 之间的转换方法
- 队列操作
- ZOJ题解
- Android之Activity跳转
- C++封装一个简单的线程类
- 黑马程序员——Java 权限public、protected、private、default
- 法线从object space到eye space的转换((normal matrix)
- 在java程序中开启另一个java程序
- Java HashMap和IdentityHashMap
- android两个含有图片的TextView控件如何并列对称水平摆放
- mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)
- Linux 硬链接与软链接(符号链接)
- 关于json解析
- ARM GPU 架构简介
- 链表的相交以及链表的循环的判断以及查找