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