2017-08-29 34 views
0

我有这一点的代码是抛出一个错误。不过,它在这个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); 
     } 

回答

1

THREE.Geometry没有quaternion属性(从我可以告诉,R70没有,要么)。

THREE.Object3D确实有一个属性,是THREE.Mesh的基类,所以你可以使用它像这样:

var myMesh = new THREE.Mesh(geometry, material); 
myMesh.quaternion.multiplyQuaternions(deltaRotationQuaternion, myMesh.quaternion); 

编辑:看你的小提琴,它看起来像你已经想通那个,对吗?

three.js r87

+0

OH!是啊。由于我的项目中存在一些令人困惑的命名约定,并且还因为我还没有吃午餐,所以我忽略了这一点。谢谢吉姆! – totallytypicalcow

相关问题