【问题标题】:What is up vector in ray tracing?光线追踪中的向上矢量是什么?
【发布时间】:2021-06-30 21:37:12
【问题描述】:

我试图了解光线追踪中的向上矢量是什么,但我不确定我是否正确理解它。向上向量是否用于获取图像平面?我将得到“正确的向量”,使向上向量和前向向量(=目标 - 原点)之间的叉积。它还有其他动机吗?一个很好的例子可以帮助我理解它。

【问题讨论】:

  • 你是指描述Camera的向量吗?
  • 是的,但是这里使用前向向量找到了向上向量。我认为在某些应用中,向上向量是光线追踪器的输入(而相机的向上向量和“世界”的向上向量并不相同)。
  • “相机的上向量和“世界”的上向量不一样” 是的。摄像头可能倒置。

标签: graphics raytracing


【解决方案1】:

让我们修改一下如何构建这些向量:

首先,您的前向矢量非常简单:vec3 forward = vec3(camPos - target) 即您的相机面向的相反方向,其中目标是 3d 空间中的一个点,而 camPos 是您相机的当前位置。

现在您无法仅使用一个向量来定义笛卡尔坐标系,因此我们需要另外两个来描述相机/光线追踪器视图的坐标系。所以让我们找到一个垂直于前向向量的向量。可以通过以下方式找到此类向量:vec3 v = cross(anyVec, forward)。事实上,您可以使用随机向量(前向和空向量除外)来获得所需的第二个方向,但这并不方便。我们希望当沿 z 轴 (0, 0, 1) 看时,“右”被描述为 (1, 0, 0)。 vec3 right = cross(yAxis, forward)vec3 yAxis = (0, 1, 0) 也是如此。如果你改变你的前向矢量而不是沿着 z 轴看,你的右矢量也会改变,类似于你改变方向时你的“右”如何改变。

所以现在只剩下一个向量来描述我们相机的方向。这个向量必须垂直于右向量和前向量。可以通过以下方式找到此类向量:vec3 up = cross(forward, right)。这个向量描述了相机的“向上”。

请注意,前向、右向和上向向量需要归一化。

如果你倒立,你的向上向量将是(0, -1, 0),因此会描述你看到的一切都是颠倒的,而其他两个向量将完全一样。如果您以 90° 角观察地板,您的上矢量将是 (0, 0, 1),您的前向矢量将是 (0, 1, 0),而您的右矢量将保持在 (1, 0, 0)。因此,向上矢量的功能或“动机”是我们需要它来描述相机的方向。你需要它来“点头”相机,即调整它的俯仰。

向上向量是用来获取图像平面的吗?

向上向量用于描述相机的方向或场景中的视图。我假设您使用的是通过“查看方法”生成的视图矩阵。应用视图矩阵时,您不会旋转相机。您正在旋转所有对象/顶点。相机始终面向同一方向(通常沿负 z 轴)。更多信息您可以访问:https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-generating-camera-rays/generating-camera-rays

【讨论】:

    【解决方案2】:

    将世界空间坐标转换为视图空间的矩阵称为视图矩阵。观察矩阵是由眼点、观察方向或目标点和向上向量构成的观察矩阵。

    更多详情here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 2011-10-16
      • 2021-07-24
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多