点的变换和法向量的变换
来源:互联网 发布:洞洞板布线软件 编辑:程序博客网 时间:2024/06/05 09:16
在三维空间里,点的变换是通过仿射变换的,所以使用齐次坐标的变换矩阵来变换。
不过,当一个点作矩阵M变换时,这个点的法向量是否也可以使用矩阵M来变换呢?答案是不行,只是在特殊的情况是可以,比如没有变形的变换。
如果有变形的变换,就需要使用特殊矩阵:M矩阵的逆的转置矩阵。
具体的推导过程,可以参考下面的文章:
http://blog.csdn.net/dengyibing/article/details/51922356
之前看过一些文章,说道mesh顶点的空间变换,从本地坐标系变换到世界坐标系,位置信息是乘以世界矩阵,而点的法向量要变换到世界空间下,是要乘以世界矩阵的逆矩阵的转置矩阵。网上有关于这样做的证明。只是之前在项目中,一开始我并不知道要这样做,都是乘以世界矩阵,但是用于光照方程,或者说计算球形贴图坐标的时候,也并没有出错,最后的效果都是满意的,疑惑了很久。
最近翻看《实时计算机图形学》一说,才明白其中原因。因为项目中我用到的世界矩阵中,大部分都是只包括了平移信息和旋转信息,没有去做scale的变换,都是1:1的比例在绘制。问题就在这里,因为法向量是一个方向向量,不是矢量,在变换的过程中,把法向量变为齐次坐标的时候,W分量要设置为0,也就是忽略了平移变换。所以这个世界矩阵就可以看成是一个3*3的旋转举证,而所有的旋转矩阵都是正交矩阵。正交矩阵有一个特性,就是正交举证的逆矩阵等于他的转置矩阵。所以正交矩阵的逆矩阵的转置矩阵就是正交矩阵的转置矩阵的转置矩阵,也就是正交矩阵自己(上面一段话很绕口啊)!
所以,这时候的世界矩阵的逆矩阵的转置矩阵就是世界矩阵,所以我得到了想要的结果。如果出现了scale信息,且各个轴不是1:1的比例的话。这时候的世界矩阵就不能算是正交的,就会出现问题。
1. C++标准模板库从入门到精通
http://edu.csdn.net/course/detail/3324
2.跟老菜鸟学C++
3. 跟老菜鸟学python
4. 在VC2015里学会使用tinyxml库
5. 在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579
6.Visual Studio 2015开发C++程序的基本使用
http://edu.csdn.net/course/detail/2570
7.在VC2015里使用protobuf协议
8.在VC2015里学会使用MySQL数据库
- 点的变换和法向量的变换
- 法向量的变换
- 矩阵、向量的变换
- 法线变换详解 和 3D 变换中法向量变换矩阵的推导
- 仿射变换下的法向量
- 顶点法向量的矩阵变换
- 线性变换与仿射变换 点和向量的代数定义
- 零基础学图形学(8) 几何知识——点和向量的变换
- 点的变换
- 仿射变换(给定一组三个点前和后的变换,获得变换矩阵)
- 3D变换中法向量变换矩阵的推导
- 3D 变换中法向量变换矩阵的推导
- 矩阵变换:矩阵是怎样变换向量的
- NYOJ 298 点的变换
- nyoj 298 点的变换
- 3D图形学中的数学:法向量的变换
- 关于 法向量 的世界空间变换矩阵
- 矩阵是怎样变换向量的
- js跨域请求json数据
- 84. Spring Boot集成MongoDB【从零开始学Spring Boot】
- js页面正则表达式验证用户名为手机号或邮箱
- How to Remove PDF/A Information from a file
- accp7.0S2深入.net和c#第三章上机123
- 点的变换和法向量的变换
- Linux下监听80端口
- Angular2中ViewChild与ContentChild的区别
- iOS下JS与OC互相调用(八)-->Cordova详解+实战
- JAVA字符串格式化-String.format()的使用
- S2员工签到
- Condition接口
- Android 仿微信发朋友圈照片选择模块(FR:徐海涛)
- 不要怂,就是GAN (生成式对抗网络) (五):无约束条件的 GAN