【问题标题】:Calculating the Up-vector for glmLookAt?计算 glmLookAt 的上向量?
【发布时间】:2013-12-24 19:59:57
【问题描述】:

我有一个定向光源,我想为这个光源生成一个视图矩阵(使用 glm lookAt())。我知道光的方向和它的位置,但是我将如何只使用这些参数来获得向上的向量呢? (叉积也需要左向量,但我只有前向向量......)。总是 (0, 1, 0) 吗?

【问题讨论】:

    标签: opengl glm-math


    【解决方案1】:

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

    要定义这个基,您需要 2 个向量,例如 UV,第三个推导出为 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 设置会产生不同数量的锯齿)。

    【讨论】:

    • 我不确定我是否遵循 - 选择一个随机向量以获得每个阴影传递的随机结果?确定只有一个正确的向量吗?
    • 任何与光线方向正交的向量都是有效的 UP 向量。一个随机的 UP 向量(与光的方向正交)就足以用于阴影贴图。如果光线随时间动态变化,则随机变化的 UP 矢量仍然有效(但可能导致时间混叠,因为不同视图的采样率略有变化)。当光照不变时,使用相同的 UP 向量并且不重新计算阴影贴图
    • 我不知道阴影传递是什么意思,但是在构建阴影贴图和在阴影比较
    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多