如何旋转一个物体使其面向特定方向?

6
如果我知道一个物体朝向的方向,例如(0,0,1)。最简单的方法是将物体旋转到面对方向向量(1,1,1)?
编辑:
我尝试过这个,但是这个逻辑有问题:
var newDir = new THREE.Vector3(1,1,1);

var objectDir= new THREE.Vector3(0, 0, 1); 
objectDir.applyQuaternion(object.quaternion); // rotate this vector to object's facing direction

var pos = new THREE.Vector3();
pos.addVectors(newDir, object.position);

var axis = objectDir.cross(newDir).normalize();
var angle = objectDir.angleTo(pos);
object.rotateOnAxis(axis, angle);

3
请看一下 Object3d 上的方法。例如 lookAtrotateOnAxis 可能是你想要的。 - edA-qa mort-ora-y
@edA-qamort-ora-y 我尝试使用 rotateOnAxis,现在已经编辑了我的帖子。但它看起来方向不正确。你在代码中看到任何缺陷吗? - Lalle
3
dev67分支上有一个新的函数Quaternion.setFromUnitVectors()var vfrom = new THREE.Vector3( 0, 0, 1 ); var vto = new THREE.Vector3( 1, 1, 1 ).normalize(); object.quaternion.setFromUnitVectors( vfrom, vto ); 如果物体的“向上”方向对你很重要,那么使用object.lookAt()可能是最简单的方法。 - WestLangley
1个回答

11

使用lookAt解决了它:

var newDir = new THREE.Vector3(1, 1, 1);
var pos = new THREE.Vector3();
pos.addVectors(newDir, object.position);
object.lookAt(pos);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接