我正在寻找一种方法,通过脚本在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“出现,一旦下飞机被跟踪。然后它和履带飞机一起呆在原地。然后,它应该始终向相机/设备/用户旋转。谢谢!
发布于 2021-08-24 17:38:47
实际上,还有另一种使用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;
})();可能,在Studio 98处于活动状态时,lookAt方法没有正常工作。这在目前最新的120版本中是可行的。
https://stackoverflow.com/questions/64284072
复制相似问题