【问题标题】:computing tangent and bitangent vectors via partial derivatives通过偏导数计算切线和双切线向量
【发布时间】:2013-08-26 01:01:16
【问题描述】:

我正在尝试实现一个简单的水模拟,理论来自GPU Gems 1 chapter 1

如果你想象一个 3D 平面(平面在 xz 平面上,y 表示任意点的高度),高度场函数为:

在哪里: 波长 (w):世界空间中波之间的波峰到波峰的距离。

振幅(A):从水面到波峰的高度。

速度 (S):波峰每秒向前移动的距离。

方向 (D):垂直于波前的水平矢量 波峰旅行。

这很容易实现。

请注意 GPUGems 中的文章使用 z 方向作为高度,但这不是图形的标准(通常,x 是宽度,y 是高度,z 是深度)。所以我会参考 xz 方向,意思是平面/水平平面方向。

因此,在计算了任何给定点的高度 (y) 值后,我需要计算该点的双切线和切线向量,以便可以计算照明方程所需的法线向量。

双切线和切线向量是 x 和 z 方向的偏导数(y 是高度场值)。

所以我的问题是,我怎样才能在 x 和 z 方向上对高度场函数进行偏导数?

文章说x方向的偏导数由下式给出

我了解对from this video: 进行偏导的概念,但我不知道如何对我的高度场函数进行偏导。

谁能解释一下(比如我 5 岁)- 我对数学的掌握不是很好!

【问题讨论】:

    标签: math graphics vector derivative


    【解决方案1】:

    您想推导出以下等式:

    W(x) = A * sin(w * (D.x * x + D.y * z) + t * phi)
         = A * sin(w * D.x * x + w * D.y * z + t * phi)
    

    这是上面的扩展点积公式。因为我们想求关于 x 的导数,所以所有其他变量(x 除外)都被认为是常数。所以我们可以替换常量:

    c1 = A
    c2 = w * D.x
    c3 = w * D.y * z + t * phi
    W(x) = c1 * sin(c2 * x + c3)
    

    导数是:

    W'(x) = c1 * c2 * cos(c2 * x + c3)
    

    还原我们得到的替换:

    W'(x) = A * w * D.x * cos(w * D.x * x + w * D.y * z + t * phi)
    

    它描述了给定位置的切线的 y 分量。

    类似地,双切线(关于 z 的导数)可以描述为

    W'(z) = A * w * D.y * cos(w * D.y * z + w * D.x * x + t * phi)
    

    因此:

    tangent   = (1, W'(x), 0)
              = (1, A * w * D.x * cos(w * D.x * x + w * D.y * z + t * phi), 0)
    bitangent = (0, W'(z), 1)
              = (0, A * w * D.y * cos(w * D.y * z + w * D.x * x + t * phi), 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多