一个地板和一个直接漂浮在其上方的物体。
当我点击一个物体的一个面时,我想让整个物体旋转,使点击的面朝向地面。
face
:Raycaster选择第一个face
。up
的{{1}}替换对象的normal
向量:face
object.up.copy(face.normal)
我希望由于新的object.lookAt(floor.position)
向量,对象会在地板上看到基于点击面的方向。
但是,旋转无法按预期工作。我错过了什么?
相关代码部分:
up
http://codepen.io/anon/pen/EWRdZq
基于@WestLangley的回答: http://codepen.io/anon/pen/ryZOvx
答案 0 :(得分:0)
您想要旋转对象,使面部的法线指向特定方向。
在您的示例中,所需的方向是负y轴的方向,但您可以指定任何方向向量,只要它具有单位长度。
你可以使用这样的模式:
let direction = new THREE.Vector3( 0, - 1, 0 ); // create once and reuse
...
let object = intersects[ 0 ].object;
let normal = intersects[ 0 ].face.normal;
object.quaternion.setFromUnitVectors( normal, direction );
请注意,您的问题陈述没有唯一的解决方案。例如,对象可以"旋转"在一个轴上仍然使面朝向所需的方向。
three.js r.84