我有这个代码的工作解决方案:
var collisionGroup = new THREE.Group();
scene.add( collisionGroup );
(function() {
var geometry = new THREE.CircleGeometry( 20, 32 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var collisionCircle = new THREE.Mesh( geometry, material );
collisionCircle.position.z = -180;
collisionGroup.add( collisionCircle );
})();
function animate(timestamp) {
// apply camera rotation
var rotObjectMatrix = new THREE.Matrix4();
rotObjectMatrix.makeRotationFromQuaternion(camera.quaternion);
collisionGroup.rotation.setFromRotationMatrix(rotObjectMatrix);
// Update VR headset position and apply to camera.
controls.update();
// Render the scene through the manager.
manager.render(scene, camera, timestamp);
requestAnimationFrame(animate);
}
但是我想知道是否有可能实现这一目标而不为我想要旋转的每个对象创建组(将会有很多对象)。 这些对象的位置基于相机旋转和这就是我使用makeRotationFromQuaternion和rotation.setFromRotationMatrix的原因。
也许有更简单的解决方案然后存储相机四元数。
答案 0 :(得分:0)
我不确定这是否是您想要实现的目标的好选择,但您可以考虑直接将对象添加到相机(相机也是THREE.Object3D
实例)。作为相机的孩子,这将使他们的位置和旋转相对于相机的位置和旋转。