【问题标题】:Need help with Direct 3D's LookAt function在 Direct 3D 的 LookAt 功能方面需要帮助
【发布时间】:2011-04-16 01:46:01
【问题描述】:

我需要一些有关 Direct3D .... 功能的概念性帮助。在他们的官方文档中,他们说发生的计算可以总结为:

zaxis = normal(At - Eye) xaxis = 正常(交叉(向上,zaxis)) yaxis = cross(zaxis, xaxis)

xaxis.x yaxis.x zaxis.x 0 xaxis.y yaxis.y zaxis.y 0 xaxis.z yaxis.z zaxis.z 0 -dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l

现在我不明白前两行中使用的“normal()”函数做了什么?我怎样才能用两个向量正常计算?!不是为飞机计算法线吗?!

在第二行中, normal() 只处理一个向量(因为 cross(Up, zaxis) 将返回一个 3D 向量)..

所以基本上我需要知道在前两个方程中使用 normal() 是什么意思..

我需要这个来练习自己手动进行计算..

【问题讨论】:

    标签: graphics vector matrix direct3d 3d


    【解决方案1】:

    normal() 函数对向量进行归一化。

    向量有一个长度。这被定义为:

    length = sqrtf( (x * x) + (y * y) + (z * z) );
    

    所以如果你有一个定义为 (10, 0, 0) 的向量,它会给你一个长度

    length = sqrtf( (10 * 10) + (0 * 0) + (0 * 0) );
    

    返回长度/大小为 10 的计算非常简单。

    现在法线向量的大小为 1。因此,通过将向量的每个元素除以大小,您可以很容易地看到上面的结果,长度/大小为 1。

    所以正常的功能就是这样:

    const float length = sqrtf( (vx*vx) + (vy*vy) + (vz*vz) );
    vx                 = vx / length;
    vy                 = vy / length;
    vz                 = vz / length;
    

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2014-02-06
      • 2017-11-02
      相关资源
      最近更新 更多