图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
本文重点介绍图形流水线中出现的各种坐标系,以及实现在这些坐标系之间转换的数学知识。希望能方便大家更加深入了解图形学基础,更好的学习图形学。如果文章中有错误也请大家积极指正。文章的主要参考来源有:
1.Scratchapixel 2.0:Rendering an Image of a 3D Scene: an Overview
2.Scratchapixel 2.0:Computing the Pixel Coordinates of a 3D Point
3.深入探索透视投影变换
图形流水线中坐标变换过程
模型矩阵:模型局部坐标系和世界坐标系之间的桥梁
1.模型局部坐标系存在的意义
简单用一句话来说:方便建模人员。如果把“经纬度和高程”比作世界坐标系,那么“北京市海淀区学院路37号”就是模型局部坐标系下的一个坐标,而这个模型局部坐标系可以是“北京市”,也可以是“北京市海淀区”,甚至可以是“北京市海淀区学院路”。我们在CG中展现的各种各样物体是很多建模人员努力的结果,我们无法规定一个统一的坐标系,让所有物体都在这个坐标系上建模(一方面是考虑到单位精度,二是在模型局部坐标系下能更方便的描述模型的具体位置)。因此一般模型默认都是在模型坐标系下。
2.根据模型局部坐标系中点求其在世界坐标系中的坐标(Model_to_Wrold) or 根据世界坐标系的点求其在模型坐标系中的坐标(Wrold_to_Model)
那么如何从模型坐标系变换到世界坐标系呢,我们先给出一些默认参数,以及一些矩阵知识:
- CG中世界坐标系三个基底分别为e1(1,0,0), e2(0,1,0), e3(0,0,1),坐标系原点为O (0,0,0)
- 坐标系的矩阵表示法(行主序,以世界坐标系为例):
- 不同坐标系下坐标点相互转换满足:
P1 * M1 = P2 * M2
其中 M1为坐标系1的矩阵表示,P1为点P在坐标系1下的坐标表示;M2为坐标系2的矩阵表示,P2为点P在坐标系2下的坐标表示
根据上述,我们就可以求得模型局部点在世界坐标系下的表示。
假设世界坐标系矩阵表示为Mworld
模型坐标系矩阵表示为Mmodel
模型上点在世界坐标系下的表示为Pworld
模型上点在模型坐标系下的表示为Pmodel
则有:
Pworld * MworldCoord = Pmodel * MmodelCoord
Pworld = Pmodel * MmodelCoord * M-1worldCoord
由世界坐标系的特点知:MworldCoord