在 SparkAR 中,我希望有一个toRotate始终看着相机的元素(称为 ),类似于此处已经提出的问题(但接受的解决方案对我来说并不令人满意,而且我没有足够的声誉来回答并发表评论)。
问题是这个元素位于无法修改的层次结构中:顺序必须绝对如屏幕截图root->planeTracker->parent->toRotate所示(似乎我没有足够的声誉来嵌入图像)。
通过使用该lookAt函数(感谢这个 github 存储库,我明白我必须创建一个具有相同本地位置的toRotateDuplicate同级文件toRotate,然后使用它的转换),我可以让它在编辑器中正常工作,但是一旦我尝试使用它我的设备toRotate有一个奇怪的旋转。
经过一些测试,我可以看出问题是由于planeTracker仅在编辑器上具有等于 Quaternion.Identity 的旋转,而在设备上该值有所不同。
事实也证明了这一点,如果planeTracker用空节点替换 并对其应用非恒等旋转,即使在编辑器上我们也会遇到“奇怪的旋转”问题。
这是我的代码:
const Scene = require("Scene");
const Reactive = require("Reactive");
const find = e => Scene.root.findFirst(e);
(async function () {
const toRotate = await find('toRotate');
const toRotateDuplicate = await find('toRotateDuplicate');
const camera = await find('Camera');
toRotate.worldTransform.rotation = toRotateDuplicate.worldTransform.lookAt(camera.worldTransform.position).rotation;
})();
Run Code Online (Sandbox Code Playgroud)
由于我使用的是世界变换,所以我不应该有旋转问题,对吗?
那我该怎么办?
请注意,此处接受的解决方案对我不起作用:如果相机正在查看对象的中心,则该对象只会查看相机,而且如果我移动相机而不旋转它,我可以看到该对象是不更新其旋转以继续查看相机。