我正在寻找一种方法,通过 SparkAR Studio 98 中的脚本将跟踪平面上的场景对象定向到相机。
这听起来微不足道,但我很难找到相机的世界位置,然后从中生成一个旋转,我可以将其应用于看着相机的对象。
我让它在跟踪平面层次结构中工作,这样一个对象总是会看着另一个对象,但由于相机位于该层次结构和坐标系之外,所以它对我没有帮助。
一如既往,我一直在努力解决 SparkAR API 的反应性问题,而且事实是,事物分布在多个坐标系上,而且信息很难在网上找到,而且很快就会过时。
我的代码如下所示:
const Scene = require('Scene');
const R = require('Reactive');
export const Diagnostics = require('Diagnostics');
(async function () {
Diagnostics.log("Filter activated");
const objectToOrient = await Scene.root.findFirst('object');
const objectParent= await Scene.root.findFirst('objectParent');
const target = await Scene.root.findFirst('target');
const lookAtPt = R.point(
target.worldTransform.x,
target.worldTransform.y,
target.worldTransform.z);
const lookAtTransform = objectParent.transform.lookAt(lookAtPt);
})();
为了向读者说明这个概念,我设置了这个场景:
一旦跟踪到底层平面,就会出现“S”。然后它与被跟踪的飞机一起保持在原位。
然后它应该始终朝向相机/设备/用户旋转。
谢谢你!
实际上,还有另一种简单的方法可以做到这一点lookAt
方法。它的工作方式似乎有点不同——它总是将对象旋转到世界空间中的相机位置,而不是将相机旋转绑定到对象旋转。
const Scene = require('Scene');
(async function () {
const camera = await Scene.root.findFirst('Camera');
const tracker = await Scene.root.findFirst('planeTracker');
const plane = await Scene.root.findFirst('plane');
// Get the camera world space position
const cameraPositionSignal = tracker.worldTransform.inverse().applyToPoint(camera.worldTransform.position);
// Apply the rotation of the relative transform between plane tracker and camera world position
plane.transform.rotation = tracker.transform.lookAt(cameraPositionSignal).rotation;
// Bring object back to the plane tracker origin
plane.worldTransform.position = tracker.worldTransform.position;
})();
大概,lookAt
Spark AR Studio 98 处于活动状态时,该方法无法正常工作。这适用于当前最新的 120 版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)