three相机在模型上_javascript – Three.js围绕物体旋转相机(可能会移动)

这篇博客讨论了在Three.js中如何使相机围绕模型上的特定点旋转的问题。作者当前的实现使用矩阵变换来实现旋转,但遇到相机不朝向旋转中心的问题。作者寻求不使用`lookAt`函数的解决方案,并发现在某些角度,如接近北极或南极时,相机行为异常。
摘要由CSDN通过智能技术生成

我有一个摄像头在场景中以几种不同的方式移动.相机应围绕目标位置旋转.在我的情况下,这是用户定位的网格上的一点.因为摄像机通常不需要相对于这一点移动,所以我无法在这里使用枢纽的想法:

https://github.com/mrdoob/three.js/issues/1830.我当前的解决方案使用以下代码:

var rotationY = new THREE.Matrix4();

var rotationX = new THREE.Matrix4();

var translation = new THREE.Matrix4();

var translationInverse = new THREE.Matrix4();

var matrix = new THREE.Matrix4();

function rotateCameraAroundObject(dx,dy,target) {

// collect up and right vectors from camera perspective

camComponents.up = rotateVectorForObject(new THREE.Vector3(0,1,0),camera.matrixWorld);

camComponents.right = rotateVectorForObject(new THREE.Vector3(1,camera.matrixWorld);

matrix.identity();

rotationX.makeRotationAxis(camComponents.right,-dx);

rotationY.makeRotationAxis(camComponents.up,-dy);

translation.makeTranslation(

target.position.x - camera.position.x,target.position.y - camera.position.y,target.position.z - camera.position.z);

translationInverse.getInverse(translation);

matrix.multiply(translation).multiply(rotationY).multiply(rotationX).multiply(translationInverse);

camera.applyMatrix(matrix);

camera.lookAt(target.position);

}

问题是我们不想使用lookAt,因为重新定位.我们希望能够删除该行.

如果我们在没有lookAt的情况下使用上面的代码,我们围绕点旋转,但我们不看这一点.我的理解是,我的方法应该像相机本身旋转一样旋转相机的视图,而是相机旋转的次数很少.有人可以帮助我了解错误吗?

编辑:清理原来的帖子和代码,希望澄清我的问题.

我的想法是,我可以翻译成起源(我的目标位置),旋转我想要的数量,然后翻译回到起始位置.由于旋转,我希望在一个新的位置看起源.

实际上,我现在正在测试它,而不使用翻译矩阵,所以矩阵乘法线是:

matrix.multiply(rotationY).multiply(rotationX);

它似乎是一样的行为.感谢所有帮助到目前为止!

还有一件事!问题的一部分是,当相机的行为非常接近北极或南极.我正在寻找一种“自由漫游”的感觉.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值