首页 > 解决方案 > 无法设置未定义的属性“rotationX”

问题描述

我正在做一个基于圣诞节的过滤器,我希望我的身体保持静止并且不会根据面部运动而旋转。我有一个代码,但由于某种原因,此错误显示“无法设置未定义的属性'rotationX'”。有人可以帮助解决这个问题吗?在 Spark AR v104 上运行

这是代码:

var Scene = require('Scene');
var Textures = require('Textures');
var Materials = require('Materials');
var FaceTracking = require('FaceTracking');
var Animation = require('Animation');
var Reactive = require('Reactive');
var TouchGestures = require('TouchGestures');
const Instruction = require('Instruction');

var face = FaceTracking.face(0);
var neck = Scene.root.findFirst('Bone.004');
var neckmovement = 80;

neck.transform.rotationX = face.cameraTransform.rotationX.mul(-1.0).sum(0).expSmooth(neckmovement);
neck.transform.rotationY = face.cameraTransform.rotationZ.mul(1.0).sum(0).expSmooth(neckmovement);
neck.transform.rotationZ = face.cameraTransform.rotationY.mul(-1.0).sum(0).expSmooth(neckmovement);

标签: spark-ar-studio

解决方案


findFirst返回一个承诺(https://sparkar.facebook.com/ar-studio/learn/reference/classes/scenemodule.scene/#methods)。所以你需要做这样的事情:

var Scene = require('Scene');
var Textures = require('Textures');
var Materials = require('Materials');
var FaceTracking = require('FaceTracking');
var Animation = require('Animation');
var Reactive = require('Reactive');
var TouchGestures = require('TouchGestures');
const Instruction = require('Instruction');

(async function() {
  var face = FaceTracking.face(0);
  var neck = await Scene.root.findFirst('Bone.004');
  var neckmovement = 80;

  neck.transform.rotationX = face.cameraTransform.rotationX.mul(-1.0).sum(0).expSmooth(neckmovement);
  neck.transform.rotationY = face.cameraTransform.rotationZ.mul(1.0).sum(0).expSmooth(neckmovement);
  neck.transform.rotationZ = face.cameraTransform.rotationY.mul(-1.0).sum(0).expSmooth(neckmovement);
})();

.then(...)或者,如果您不想将所有内容包装在异步函数中,您可以决定使用promise。但我会推荐异步函数方法,因为它最有可能使您的代码中的事情变得更容易一些。


推荐阅读