【发布时间】:2013-12-24 19:59:57
【问题描述】:
我有一个定向光源,我想为这个光源生成一个视图矩阵(使用 glm lookAt())。我知道光的方向和它的位置,但是我将如何只使用这些参数来获得向上的向量呢? (叉积也需要左向量,但我只有前向向量......)。总是 (0, 1, 0) 吗?
【问题讨论】:
我有一个定向光源,我想为这个光源生成一个视图矩阵(使用 glm lookAt())。我知道光的方向和它的位置,但是我将如何只使用这些参数来获得向上的向量呢? (叉积也需要左向量,但我只有前向向量......)。总是 (0, 1, 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 为中心的整个单位圆。
您可以通过随机向量X != V && X != -V 选择一个随机U,然后U 可以计算为:
U = cross(normalize(V), normalize(X))
但是对于不同的X,使用该相机的渲染会有所不同!
如果您将其用于阴影贴图,请尝试设置您的平截头体,以便对于任何 U 阴影场景都被很好地覆盖(同样,不同的平截头体和 U 设置会产生不同数量的锯齿)。
【讨论】: