Javascript 在SparkAR Studio 98中,如何使跟踪平面上的对象朝向摄影机?
我正在寻找一种方法,通过SparkAR Studio 98中的脚本将跟踪平面上的场景对象定向到摄影机。 这听起来很琐碎,但我很难找到相机的世界位置,然后从中生成旋转,我可以应用于观察相机的对象 我让它在跟踪平面层次中工作,这样一个对象将始终注视另一个对象,但由于摄影机位于该层次和坐标系之外,这对我没有帮助 和往常一样,我对SparkAR API的反应性以及事物分布在多个坐标系上、信息在网上很难找到并且很快就过时的事实感到困惑。 我的代码如下所示:Javascript 在SparkAR Studio 98中,如何使跟踪平面上的对象朝向摄影机?,javascript,reactive-programming,augmented-reality,spark-ar-studio,Javascript,Reactive Programming,Augmented Reality,Spark Ar Studio,我正在寻找一种方法,通过SparkAR Studio 98中的脚本将跟踪平面上的场景对象定向到摄影机。 这听起来很琐碎,但我很难找到相机的世界位置,然后从中生成旋转,我可以应用于观察相机的对象 我让它在跟踪平面层次中工作,这样一个对象将始终注视另一个对象,但由于摄影机位于该层次和坐标系之外,这对我没有帮助 和往常一样,我对SparkAR API的反应性以及事物分布在多个坐标系上、信息在网上很难找到并且很快就过时的事实感到困惑。 我的代码如下所示: const Scene = require('S
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”将立即出现。然后它和被跟踪的飞机一起留在原地。
然后,它应始终朝向相机/设备/用户旋转。
谢谢大家! 什么有效 在浪费了一个周末之后,在放弃十分钟之后,我终于找到了如何去做。实际的解决方案是如此简单,以至于我很难发布它,但它就在这里 使用脚本,我只是将
objectToOrient
的旋转绑定到相机的旋转。就这样
const S = require('Scene');
const R = require('Reactive');
const D = require('Diagnostics');
// Enter look-at-target and object that needs to look at the target here
const objectName = 'lookAtObject';
const pivotName = 'pivot';
const targetName = 'Camera';
// const targetName = 'target';
(async function () {
D.log("Filter activated");
const [object, pivot, target] = await Promise.all([
S.root.findFirst(objectName),
S.root.findFirst(pivotName),
S.root.findFirst(targetName)])
.catch((error) => D.log(error.message));
const deviceTransform = target.worldTransform;
const pivotTransform = pivot.worldTransform;
object.transform.rotation = deviceTransform.rotation;
object.transform.position = pivotTransform.position;
D.log("End of Log");
})();
在删除了两页我的旧代码后,我也尝试使用补丁来复制它,但将DeviceMotion补丁插入到对象的3D旋转中,实际上在我的android手机上会产生不同的、违反直觉的行为。也许补丁中的旋转和设备实际生成的旋转不一致,我对这个话题的评论很感兴趣
什么不起作用
在我认为我通过角度计算和世界变换解决了这个问题之后,就像我之前在这里发布的那样,它实际上不起作用,我不得不在这上面再浪费两天的时间,通过手动计算向量之间的角度来排除和查找我的计算中的问题,四元数或SparkAR提供的lookAt
的所有变体
在我学习DeviceMotion模块的过程中,我希望它能解决我无法在场景中获得相机的最新世界位置的问题。我想用这个位置来计算两个向量之间的角度差,然后从这个角度旋转物体。与大多数解决方案一样,这在编辑器中非常有效,但在我的手机上却不行。
不幸的是,它不会在场景中更新一次。经过一些调试,我发现DeviceMotion.worldTransform实际上只包含一个旋转,但在访问其位置坐标时不会抛出错误。
我觉得这个软件包太令人沮丧了。我想确认一下:你也问过这个吗?(因为如果你需要寻求他人的帮助,总是先在最权威的地方寻求帮助,即使你也会在其他地方寻求帮助。最好的情况是,在这里得到答案之前,你会在那里得到答案,你可以自己写下答案来帮助未来的访客)谢谢你,我会的。我还想感谢你们关于贝塞尔曲线的精彩入门,这并不是开玩笑,半年前,这强烈地激励了我开始攻读汽车表面造型专业的CS学位。我热爱我的课程和数学,这在很大程度上是因为你的网站很棒。谢谢你,迈克!这太神奇了,很高兴它能起到作用!=)