Javascript 3J绕Y旋转相机
我对这个有点困惑:S 我创建了一个代码,让我的相机“半途而废”。我的意思是,我可以用鼠标移动事件将相机旋转半圈,但目标是整圈:) 当this.Camera.position.z/半径为-1或1:S时,相机移动停止Javascript 3J绕Y旋转相机,javascript,three.js,Javascript,Three.js,我对这个有点困惑:S 我创建了一个代码,让我的相机“半途而废”。我的意思是,我可以用鼠标移动事件将相机旋转半圈,但目标是整圈:) 当this.Camera.position.z/半径为-1或1:S时,相机移动停止 有人能帮我一下吗?:)如果你想绕轴旋转,为什么不试试使用四元数 camera.position.applyQuaternion( new THREE.Quaternion().setFromAxisAngle new THREE.Vector3( 0, 1, 0 ), // T
有人能帮我一下吗?:)如果你想绕轴旋转,为什么不试试使用
四元数
camera.position.applyQuaternion( new THREE.Quaternion().setFromAxisAngle
new THREE.Vector3( 0, 1, 0 ), // The positive y-axis
RADIAN / 1000 * delta // The amount of rotation to apply this time
));
camera.lookAt( scene.position );
上述操作将围绕Y轴创建一个旋转
(定义为四元数
),并且每拖动1000次增量
(可以是毫秒,也可以是像素)。下面是一个示例实现:
var renderer=new THREE.WebGLRenderer;
var场景=新的三个场景;
var摄像机=新的三视角摄像机;
var last=false;
变量四元数=新的三个四元数;
变量轴=新的三个向量3(0,1,0);
renderer.doElement.addEventListener('mousedown',event=>{
last=新的三个.Vector2(event.clientX,event.clientY);
});
renderer.domeElement.addEventListener('mousemove',event=>{
如果(最后){
让delta=event.clientX-last.x;
camera.position.applyQuaternion(quaternion.setFromAxisAngle(
轴,Math.PI*2*(增量/内部宽度)
));
摄像机。注视(场景。位置);
set(event.clientX,event.clientY);
}
渲染器。渲染(场景、摄影机);
});
renderer.doElement.addEventListener('mouseup',event=>{
last=false;
});
添加(新的THREE.Mesh(新的THREE.BoxGeometry,新的THREE.MeshBasicMaterial));
场景.添加(新的3.AxesHelper);
设置大小(512);
摄像机位置设置(0,0,5);
渲染器。渲染(场景、摄影机);
document.body.appendChild(renderer.doElement)代码>
如果要绕轴旋转,为什么不尝试使用四元数
:
camera.position.applyQuaternion( new THREE.Quaternion().setFromAxisAngle
new THREE.Vector3( 0, 1, 0 ), // The positive y-axis
RADIAN / 1000 * delta // The amount of rotation to apply this time
));
camera.lookAt( scene.position );
上述操作将围绕Y轴创建一个旋转
(定义为四元数
),并且每拖动1000次增量
(可以是毫秒,也可以是像素)。下面是一个示例实现:
var renderer=new THREE.WebGLRenderer;
var场景=新的三个场景;
var摄像机=新的三视角摄像机;
var last=false;
变量四元数=新的三个四元数;
变量轴=新的三个向量3(0,1,0);
renderer.doElement.addEventListener('mousedown',event=>{
last=新的三个.Vector2(event.clientX,event.clientY);
});
renderer.domeElement.addEventListener('mousemove',event=>{
如果(最后){
让delta=event.clientX-last.x;
camera.position.applyQuaternion(quaternion.setFromAxisAngle(
轴,Math.PI*2*(增量/内部宽度)
));
摄像机。注视(场景。位置);
set(event.clientX,event.clientY);
}
渲染器。渲染(场景、摄影机);
});
renderer.doElement.addEventListener('mouseup',event=>{
last=false;
});
添加(新的THREE.Mesh(新的THREE.BoxGeometry,新的THREE.MeshBasicMaterial));
场景.添加(新的3.AxesHelper);
设置大小(512);
摄像机位置设置(0,0,5);
渲染器。渲染(场景、摄影机);
document.body.appendChild(renderer.doElement)代码>