模型视图变换时,法线向量要乘模型视图矩阵的逆转置矩阵【转】
模型视图变换时,法线向量要乘模型视图矩阵的逆转置矩阵
早前一直被这个问题困惑,但是自己推倒了很多遍也没推出来。
哎,在gameres上搜了3年前的谈话,后来在gamedev搜到了答案。
其实在计算机图形学中,只要是变换,无论平移,旋转,缩放,都是乘一个矩阵。
在模型视图变换时,顶点乘模型视图变换矩阵,而顶点对应的顶点法线向量(或其他的法线向量)则要乘模型视图矩阵的逆转置矩阵。
顶点和法线都是向量,他们的区别是什么?无非顶点是<x, y, z>表示缺省的<x, y, z, 1>,而法线向量是<x, y, z>表示缺省的<x, y, z, 0>。关于为什么是这样,不用我说了吧,2个顶点向量减下看看就知道了。
从这点来看,确实不同,或许就是这个不同,造成了变换的不同吧。
法线向量只能保证方向的一致性,而不能保证位置的一致性,所以,所有线向量必须以面的形式进行变换,如下:
哎,在gameres上搜了3年前的谈话,后来在gamedev搜到了答案。
其实在计算机图形学中,只要是变换,无论平移,旋转,缩放,都是乘一个矩阵。
在模型视图变换时,顶点乘模型视图变换矩阵,而顶点对应的顶点法线向量(或其他的法线向量)则要乘模型视图矩阵的逆转置矩阵。
顶点和法线都是向量,他们的区别是什么?无非顶点是<x, y, z>表示缺省的<x, y, z, 1>,而法线向量是<x, y, z>表示缺省的<x, y, z, 0>。关于为什么是这样,不用我说了吧,2个顶点向量减下看看就知道了。
从这点来看,确实不同,或许就是这个不同,造成了变换的不同吧。
法线向量只能保证方向的一致性,而不能保证位置的一致性,所以,所有线向量必须以面的形式进行变换,如下:
Transforming Planes
If we have a plane vector n = [a, b, c, d] which describes a plane then for any point p = [x, y, z, 1] in that plane the follow equation holds:
nt p = ax + by + cz + d = 0
If for a point p on the plane, we apply an invertible transformation R to get the transformed point p1, then the plane vector n1 of the transformed plane is given by applying a corresponding transformation Q to the original plane vector n where Q is unknown.
p1 = R p
n1 = Q n
n1t p1 = 0
Begin by substituting for n1 and p1:(Q n)t (R p) = 0
nt Qt R p = 0
Qt R = I
Qt = R-1
Q = (R-1)t
n1 = Q n = (R-1)t n
饮水思源,不忘初心。
要面包,也要有诗和远方。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-04-10 libxml2 使用教程【转】
2018-04-10 c++实现Xml和json互转【转】
2018-04-10 C++中JSON的使用详解【转】
2018-04-10 Libxml2函数及使用方法概述【转】
2017-04-10 RenderMonkey 练习 第二天 【opengl 光照模型】