计算glmLookAt的向上矢量?

时间:2013-12-24 19:59:58

标签: opengl glm-math

我有一个定向灯,我想为这个灯生成一个视图矩阵(使用glm lookAt())。我知道光的方向和它的位置,但我怎么会只用这些参数获得向上矢量? (交叉产品也需要左矢量,但我只有前向矢量......)。总是(0,1,0)?

1 个答案:

答案 0 :(得分:0)

你想要一个标准正交基(V,U,R),其中V是视图方向(在你的情况下为光方向),U是向上向量,R是向量正交到UV(V,U,R) +您的光线位置O定义相机。

要定义此基础,您需要2个向量,例如UV,第三个推导为cross(U,V)。这就是glmLookAt需要2个向量而不仅仅是V向量的原因。

如果您只有V,则U有无限可能:O+U定义以O为中心的整个单位圆。

您可以通过随机向量U选择随机X != V && X != -V,然后将U计算为:

U = cross(normalize(V), normalize(X))

但是对于不同的X,使用该相机的渲染会有所不同!

如果你正在使用它进行阴影贴图,请尝试设置平截头体,以便对任何U阴影场景进行良好覆盖(同样,不同的视锥和U设置会产生不同的锯齿量)