在以某种方式与XTK相机交互后 - 平移,旋转,缩放 - 有没有办法从相机中检索位置,焦点和向上矢量的新值?看起来getter和setter是在相机javascript中定义的,但是在交互期间不会更新与这些相对应的属性。例如,camera.position
返回的值即使在翻译后也不会更新。
是否有可以提供这些值的机制,或者为修改摄像机的所有交互添加额外的观察程序?
答案 0 :(得分:0)
位置,向上矢量和焦点首先用于配置3d空间。然后,所有交互只是修改创建的视图矩阵。
您可以像这样查询视图矩阵
ren = new X.renderer3D()
console.log(ren.camera.view + "") // prints the view matrix as a string
答案 1 :(得分:0)
我看到了一些解决方案,取决于谁做了这份工作。
首先:为摄像机添加一个选项以启用跟踪(默认情况下禁用),一个可以更新/位置/焦点的选项很容易吗?因为它只是在同一时刻将前一个矢量乘以变换矩阵,而不是将视图矩阵乘以变换矩阵。但它可能会带来额外的运营成本。或者我们可以像在我的“第二个”
中那样计算它第二:如果我的记忆是好的,基数B中的变换矩阵T(O(x,y,z), i ,* j *,< strong> k )有一个众所周知的结构吗?像这样的东西(也许我忘记换位):
i1 j1 k1 u1
i2 j2 k2 u2
i3 j3 k3 u3
0 0 0 1
其中:
([u1,u2,u3])=T(0(x,y,z)) i.e. gives the translation in the base B
([i1,i2,i3])=T(**i**)
([j1,j2,j3])=T(**j**)
([k1,k2,k3])=T(**k**)
然后如果你想要3个角度它是非常苛刻的(参见euler的计算),但如果你想要别的东西可以更容易。例如,你想要向上矢量,它是我们的变换T的基数B的“k”向量的图像,所以它是[j1,j2,j3]不是吗?然后,您无法轻松获得焦点,但您可以轻松获得焦点向量:它是[k1,k2,k3]! (实际可能是-1 * [k1,k2,k3])。如果你看看X.camera3D的LookAt_方法,它不会给webgl一个焦点,而是一个标准化的焦点向量:点位置无关紧要,你只需要在焦点向量上有1个点,你就可以计算它现在不 ?它只是一个当前位置和currentfocusvector coordinates。
我希望我的记忆很好,而且我不是说完全没事。
只有一个问题:视图矩阵有一个setter,那你为什么要存储&amp;设置/聚焦/位置而不是直接存储和设置视图?
PS:谨慎,可能有一个比例运算符k,所以矩阵会有所不同,但我不认为有xtk。 PS 2:粗体是矢量。 [数字,数字,数字]是由他的坐标显示的3D矢量。