Javascript 如何制作Object3D';通过旋转物体看另一张脸(如地板) 网络引文
具有地板和漂浮在其正上方的对象的场景 我想做什么 当我单击一个对象的面时,我希望整个对象以这样的方式旋转,即单击的面面向地板 到目前为止我都试过了Javascript 如何制作Object3D';通过旋转物体看另一张脸(如地板) 网络引文,javascript,vector,three.js,rotation,normals,Javascript,Vector,Three.js,Rotation,Normals,具有地板和漂浮在其正上方的对象的场景 我想做什么 当我单击一个对象的面时,我希望整个对象以这样的方式旋转,即单击的面面向地板 到目前为止我都试过了 单击任何对象的面:光线投射器拾取第一个面 将对象的up向量替换为单击的face的normal:object.up.copy(face.normal) 调用object.lookAt(floor.position) 我希望,由于新的up向量,对象将以基于单击的面的方向注视地板 但是,旋转没有按预期工作。我错过了什么 有关守则部分: var inters
面
:光线投射器拾取第一个面
up
向量替换为单击的face
的normal
:object.up.copy(face.normal)
object.lookAt(floor.position)
up
向量,对象将以基于单击的面的方向注视地板
但是,旋转没有按预期工作。我错过了什么
有关守则部分:
var intersects = raycaster.intersectObject( cylinder );
if(intersects === undefined || intersects.length === 0) return;
let face = intersects[0].face;
// Set cylinders up to the normal of the intersected face to reoriented object
// to make the clicked-on face `lookAt()` the floor:
cylinder.up.copy(face.normal);
cylinder.up.normalize();
cylinder.lookAt(floor.position);
全部代码
(更新)固定代码
根据@WestLangley的回答:
要旋转对象,使面法线指向特定方向 在您的示例中,所需的方向是负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您希望旋转对象,使面法线指向特定方向 在您的示例中,所需的方向是负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您缺少的是
lookAt()
对对象进行定向,使对象的局部正z轴指向所需的方向。对象的上方向向量保持对象“右侧向上”。缺少的是lookAt()
使对象定向,以便对象的局部正z轴指向所需的方向。对象的上方向向量保持对象“右侧向上”。啊,感谢您清除up
用法。还完全错过了setFromUnitVectors()
,它显然正是我想要做的仅供参考,上面第1行中的四元数以后将不再使用。其余部分有效。已修复。谢谢-啊,谢谢你清理up
用法。还完全错过了setFromUnitVectors()
,它显然正是我想要做的仅供参考,上面第1行中的四元数以后将不再使用。其余部分有效。已修复。谢谢-