0

在以某种方式与 XTK 相机交互后——平移、旋转、缩放——有没有办法从相机中检索位置、焦点和向上矢量的新值?看起来 getter 和 setter 是在相机 javascript 中定义的,但是在交互过程中,它们对应的属性并没有更新。例如,返回的值camera.position即使在翻译之后也不会更新。

是否有一种机制可以提供这些值,或者有一种方法可以为所有修改相机的交互添加额外的观察者?

4

2 回答 2

0

位置、向上向量和焦点首先用于配置 3d 空间。然后,所有交互只修改创建的视图矩阵。

您可以像这样查询视图矩阵

ren = new X.renderer3D()
console.log(ren.camera.view + "") // prints the view matrix as a string
于 2012-06-23T05:46:02.280 回答
0

我看到了一些解决方案,具体取决于谁来完成这项工作。

首先:向摄像机添加一个选项以启用跟踪(默认情况下禁用),一个可以更新向上/位置/焦点的选项很容易不是吗?因为它只是在同一时刻将前一个向量乘以变换矩阵,而不是我们将视图矩阵乘以变换矩阵。但这可能会带来额外的运营成本。或者我们可以像我的“第二”一样计算它

第二:如果我的记忆很好,那么基础 B(O(x,y,z), i ,* j *, k ) 中的变换矩阵 T具有众所周知的结构不是吗?像这样的东西(也许我忘记了换位):

 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] 不?然后,您无法轻松获得焦点,但您可以轻松获得焦点矢量:它是 [k1,k2,k3] !(实际上可能是 -1*[k1,k2,k3])。如果你看好 X.camera3D 的 LookAt_ 方法,它不会给 webgl 一个焦点,而是一个归一化的焦点向量:点位置无关紧要,你只需要焦点向量上的 1 个点,你可以计算它现在不 ?它只是 currentposition 和 currentfocusvector 坐标的总和。

我希望我的记忆很好,我并不是说完全狗屎。

只有一个问题:视图矩阵有一个设置器,那么为什么要存储和设置/聚焦/位置而不是直接存储和设置视图?

PS:小心,可能有一个比例运算符k,所以矩阵会有所不同,但我认为xtk中没有。PS 2:粗体是向量。[number,number,number] 是由他的坐标显示的 3D 矢量。

于 2012-06-26T10:38:32.287 回答