Javascript three.js lookAt():如何指向某个*非';t*朝向另一个对象的正Z轴
我正在创建一个应用程序,其中一个人(现在我使用的是圆锥形)站在某个表面上(现在我使用的是纵向放置的圆柱体),我希望他们的脚朝向某个点(现在它是圆柱体的中心) (编辑:我刚刚意识到这张照片中我的Z轴指向错误的方向;它应该指向相机,但问题没有改变。) 下面是一个版本的代码,类似于我试图完成的。(使用箭头键移动圆锥体) 上面的代码给了我一些类似于我正在寻找的东西,但问题是lookAt()似乎总是指向某个方向的局部正Z轴,我更希望它指向局部负Y轴 我不想改变模型本身的x,y,z轴,因为我觉得当我将其他逻辑应用到person对象时,这将是一个很难处理的问题 是否有方法更改axis lookAt()使用的对象?还是我必须使用自己的lookAt()函数?谢谢~ 是否有方法更改axis lookAt()使用的对象 否,3D对象(不包括相机)的默认本地Javascript three.js lookAt():如何指向某个*非';t*朝向另一个对象的正Z轴,javascript,three.js,Javascript,Three.js,我正在创建一个应用程序,其中一个人(现在我使用的是圆锥形)站在某个表面上(现在我使用的是纵向放置的圆柱体),我希望他们的脚朝向某个点(现在它是圆柱体的中心) (编辑:我刚刚意识到这张照片中我的Z轴指向错误的方向;它应该指向相机,但问题没有改变。) 下面是一个版本的代码,类似于我试图完成的。(使用箭头键移动圆锥体) 上面的代码给了我一些类似于我正在寻找的东西,但问题是lookAt()似乎总是指向某个方向的局部正Z轴,我更希望它指向局部负Y轴 我不想改变模型本身的x,y,z轴,因为我觉得当我将其他逻
正向矢量为(0,0,1)
。与其他引擎不同,three.js
不允许配置forward
向量,只允许配置up
向量。但这对你的情况并没有什么帮助
可以尝试变换几何体以获得类似效果
如果出于某些原因不想这样做,并且仍然想使用Object3D.lookAt()
,则必须计算不同的目标向量(因此不是圆柱体的中心)。即使lookAt
方法的前向向量无法更改(如@Mugen87所述),你可以通过事先知道前向Z轴和你认为你的网格是“向上”的轴(EX:站在Y轴上)来调整局部旋转。
基本上,在您的情况下,只需在lookAt
方法之后添加这一行:
mesh.rotateOnAxis(新的三矢量3(1,0,0),Math.PI*-0.5);
圆锥体将向上看:)我也有这个问题,我希望对象的局部x轴指向注视坐标。你的建议是找到一个新的目标?你能描述一下新的x,y,z是什么吗?谢谢当我射入代码笔时,没有运行按钮,也没有自动运行。我如何运行它?对不起,我是codepen noob![自我解释]“3D对象(不包括摄影机)的默认局部前向向量为(0,0,1)”:从three.js代码中,我了解到摄影机和灯光的局部前向向量为(0,0,-1)。只有摄影机具有不同的前向向量。
//...
person = CreatePerson();
person.mesh.up = new THREE.Vector3(0, 0, 1);
//
// ...
//
function updateObj(obj, aboutObj=false){
let mesh = obj.mesh;
if (aboutObj) {
mesh.lookAt(
aboutObj.mesh.position.x,
aboutObj.mesh.position.y,
mesh.position.z)
};
}
//
// ...
//
function animate() {
// ...
updateObj(person);
// ...
}