正确的方式实现这个较旧的R70 threejs代码与新版本一起工作
问题描述:
我有这一点的代码是抛出一个错误。不过,它在这个jsfiddle中工作得很好。我试图旋转一个立方体,并用轨迹球控制平移它。这在小提琴中起作用,但是当我将它带入视觉工作室时,它会将此错误显示为镶边,“无法读取属性 '未定义的multiplyQuaternions'。正确的方式实现这个较旧的R70 threejs代码与新版本一起工作
https://jsfiddle.net/perrinprograms/n6u6asza/668/
这就是我想实现的代码。我猜这是因为小提琴使用的是旧版本的three.js,而我在我的项目中使用了更新的版本。有谁知道是否有一种方法可以正确书写这一行,“geometry.quaternion”?谢谢。
var geometry = new THREE.Geometry();
deltaRotationQuaternion = new THREE.Quaternion()
.setFromEuler(new THREE.Euler(
toRadians(deltaMove.y * 0.4),
toRadians(deltaMove.x * 0.4),
0,
'XYZ'
));
geometry.quaternion.multiplyQuaternions(deltaRotationQuaternion, geometry.quaternion);
}
答
THREE.Geometry
没有quaternion
属性(从我可以告诉,R70没有,要么)。
THREE.Object3D
确实有一个属性,是THREE.Mesh
的基类,所以你可以使用它像这样:
var myMesh = new THREE.Mesh(geometry, material);
myMesh.quaternion.multiplyQuaternions(deltaRotationQuaternion, myMesh.quaternion);
编辑:看你的小提琴,它看起来像你已经想通那个,对吗?
three.js r87
OH!是啊。由于我的项目中存在一些令人困惑的命名约定,并且还因为我还没有吃午餐,所以我忽略了这一点。谢谢吉姆! – totallytypicalcow