3.7.2 xr 插件摄像机坐标角度

还有就是,如果频繁的进行位置跳转,可能会导致头晕比较厉害

突然想到,如果把相机比做眼睛不是很恰当,因为摄像机不仅仅会旋转,而且在agent上还会移动。而咱们眼睛只会旋转的。 :joy: :joy: :joy:

大佬,有个问题,手柄控制摄像机在agent上的移动,是不是都是沿着本地坐标系x和y轴平行的方向移动的呀。一旦agent有了角度,摄像机的移动还是平行于本地的坐标系移动吗?如果是这样,那可能就会有点问题了。

我们在对agent进行旋转的时候,无法屏蔽xz,那样的话,相机的指向就不对了,而且坐标也极有可能是不对的。

还发现一个现象:
之前说过我们设置相机角度只能通过设置agent角度来设置。
但是我下面的代码,是挂在相机上的组件。圈起来的代码,注释和不注释的时候,效果是不同的,说明这行代码生效了。所以咱们直接设置相机角度是有时机的吗?

如果要完全一样,就需要定制,屏蔽头显的位移,把屏蔽的位移加到xtagent上。
还有就是如果是坐着玩的话,真人不走动的话,头显的位移其实就是单纯的人头动,也就是眼睛移动

手柄是控制的xragent的移动,你绑定的forward source是什么方向,就朝着什么方向移动

相机节点的坐标应该是会被每帧刷新的,本地坐标的值会被头显的值覆盖,按道理来说这一行是没有影响的。是不是你对xragent还有其他设置,使用了hmd的坐标,导致了影响。

还有就是agent的旋转,你们是怎么控制的,目的是什么呢,是类似我之前说的,按人的方式去控制的逻辑吗

我就是设置了xmd的一个旋转,还有就是设置了agent的世界坐标了。都是上面那个截图里的。

我们是按人的方式,只不过就是人的眼睛会移动和旋转,眼睛相对人有个自己的本地角度以及自己的本地坐标。
为了使眼睛能够在某个位置,指向某个方向,我们反着计算出agent响应的角度以及坐标。


设置了agent属性,相机角度正确了,位置也正确了。

但是,多出一个问题,就是人感觉是斜着的,向左移动离地面越来越低,向右移动会离地面越来越高。这个需要大佬帮忙看看。
【我说个理解,不知道对不对,就是设备的旋转和移动,应该都是摄像机的本地旋转和本地坐标的变化吧?】


这里反着计算的时候,相机的xz是有旋转的吧?就导致了agent的xz也有了旋转,所以在反着计算的时候,应该是需要把计算结果的xz屏蔽,再赋值给agent。
你可以在跳转位置的前后,打印一下agent的坐标看看,应该是xz有了旋转了

嗯,反着计算的时候相机不是0,因为设备稍微动一下都会有角度的变化。
我也打印了,agent的x和z都不是0。
但是,因为相机的xz不是0,为了保证相机指向某个方向,agent的xz也肯定不会是0吧,是0的话,估计相机的指向就不对了。
不过好像您说的对,我试试看。 :joy: 绕的有点晕。

大佬,agent的xz都为0的情况下正常了。
多谢大佬了。
还有个问题,我们本神有几个固定的吸附位置以及角度,正常设置是对的,但是一旦设备移动了以后,我再进行设置那些吸附的位置,就会偏了。这是为啥呢,感觉有点奇怪呢。

这个设置,是怎么设置的。设置的是agent还是什么。
说的稍微具体一点呢

因为你可能是在抬头低头的时候进行计算的,但是你跳转到某一视角的时候,其实是不需要依赖低头抬头的这个角度的,只需要依赖面向就行(相机的Y旋转)。

还是这张图,每次都是这里设置的,都是设置的agent的位置,因为相机我们是无法控制的。
人如果没有走动是正常的,一旦走动就会有问题。


这里的减法我没太理解,我觉得你就是想把当前视角转到你需要的位置对吧。
那你可以,把吸附的位置,定为你相机需要到达的位置,假设为世界矩阵A。 然后用当前的相机的本地坐标和世界矩阵A,求出相机父节点的世界坐标B,进而求出agent的坐标就可以了,记得屏蔽xz

或者还有一种退而求其次的办法,把你预设的吸附位置设为agent的坐标A,再结合相机的Y轴旋转,把agent的坐标A的Y轴旋转到相机能够面向你吸附位置的物体就行。
对于用户来说,影响视角的其实只有Y轴旋转,xz的旋转在计算的时候都可以屏蔽掉。
需要注意的是,如果有斜坡类似的需求的时候,xz的屏蔽就要慎重了

这里的减法,我的理解是把相机的世界坐标,减去相机的本地坐标在世界坐标轴xyz上的分量,这样求得的就是agent的世界坐标了。

应该不能这样算,这里涉及到旋转,还有他们中间还有一个节点,那个节点是有高度的,最好用矩阵去计算

反正我现在用这种方式计算,感觉还挺对的。哈哈。。
您说的高度会变,是说的TrackingSpace节点吗?
用矩阵有点头大,我按您的思路去看看矩阵怎么算。
话说,矩阵里的旋转是绕着本地轴旋转还是绕着其他轴旋转的?