我有一个定向灯,我想为这个灯生成一个视图矩阵(使用glm lookAt())。我知道光的方向和它的位置,但我怎么会只用这些参数获得向上矢量? (交叉产品也需要左矢量,但我只有前向矢量......)。总是(0,1,0)?
答案 0 :(得分:0)
你想要一个标准正交基(V,U,R)
,其中V
是视图方向(在你的情况下为光方向),U
是向上向量,R
是向量正交到U
和V
。
(V,U,R)
+您的光线位置O
定义相机。
要定义此基础,您需要2个向量,例如U
和V
,第三个推导为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
设置会产生不同的锯齿量)