如何根据OpenGL中的gluLookat函数求解 ViewMatrix矩阵。
视图坐标转换实际上就是把定点的坐标转换进眼睛(摄像机)坐标系中,这个操作与将眼睛转换到相应位置并设定朝向的操作相反。 来完成视图变换操作的矩阵V由两部分矩阵连乘形成的,一部分是朝向矩阵O,一部分是平移矩阵T,所以我们有: V= OT; 朝向矩阵是由视线朝向D和眼睛的上方向U决定的,这两个方向向量叉乘得到向量C,向量C和向量D叉乘得到U‘,C,U,D(对应x,y,z),形成了眼睛坐标系的三个方向,它们属于右手坐标系, 相关的公式如下: c = d x u, u' = c x d, 将得到的三个变量相应的单位化,分别用这三个变量传到下面的矩阵中,就得到了转换需要的朝向矩阵O: ,注意向量d的各个分量都被取了原值的负值。 而平移矩阵,则是将眼睛移动操作的反操作,如果你有眼睛的位置,直接将眼睛的位置全取原值负值就OK了,但是需要注意的一点是,此时必须先把眼睛在世界坐标系中的位置通过上面刚求出来的矩阵转换为眼睛坐标系中的位置,然后再把眼睛位置取负值。 以上红字部分是十分重要的,大多数文档均未提及。
|
|
来自: 昵称12278894 > 《opengL》