three.js 장면에서 x 축을 중심으로 카메라를 회전하는 다음 코드가 있습니다.
var cameraOrginX = 0, cameraOrginY = 0, cameraOrginZ = 0;
var cameraEndX = 0, cameraEndY = 0, cameraEndZ = 1000;
var angle = 0;
function init(){
camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.set(0,0,1000);
//ROTATE THE CAMERA
var radians = angle * Math.PI / 180.0;
cameraEndY = Math.cos(radians) * (cameraEndY-cameraOrginY) - Math.sin(radians) * (cameraEndZ-cameraOrginZ) + cameraOrginY;
cameraEndZ = Math.sin(radians) * (cameraEndY-cameraOrginY) + Math.cos(radians) * (cameraEndZ-cameraOrginZ) + cameraOrginZ;
//
//CAMERA NEW POS
camera.position.x = cameraOrginX + cameraEndX;
camera.position.y = cameraOrginY + cameraEndY;
camera.position.z = cameraOrginZ + cameraEndZ;
console.log(camera.position.y + " " + camera.position.z);
}
각도 변수를 0으로 설정하면 카메라 위치가 x = 0, y = 0, z = 1000입니다. 이것은 기대하고 좋은 것입니다.
예를 들어 각도를 90 도로 변경하면 위치가 x = 0 y = -1000 z = -999,99999로 변경됩니다. 위치는 x = 0, y = -1000, z = 0이 될 것으로 예상합니다.
왜 이런 일이 발생합니까? 누군가 내가 뭘 잘못하고 있는지 설명해 줄 수 있습니까? :)
0을 제외한 모든 각도는 나에게 이상한 위치를 제공합니다 :(
더 많은 코드 또는 jsfidle이 필요하면 저에게 물어보십시오 :)
cameraEndY = Math.cos(radians) * (cameraEndY-cameraOrginY) - Math.sin(radians) * (cameraEndZ-cameraOrginZ) + cameraOrginY;
cameraEndZ = Math.sin(radians) * (cameraEndY-cameraOrginY) + Math.cos(radians) * (cameraEndZ-cameraOrginZ) + cameraOrginZ;
당신은 사용하지 못할 cameraEndY
에 cameraEndZ
이미 업데이트되었습니다 때문에 계산. 이 계산에서는 업데이트 된 계산 이 아니라 이전 y
및 z
좌표 를 사용해야 rotation
합니다. 대신 다음을 사용하십시오.
var cosTheta = Math.cos(radians);
var sinTheta = Math.sin(radians);
var a = cosTheta * (cameraEndY-cameraOrginY);
var b = sinTheta * (cameraEndZ-cameraOrginZ);
var c = sinTheta * (cameraEndY-cameraOrginY);
var d = cosTheta * (cameraEndZ-cameraOrginZ);
cameraEndY = a - b + cameraOrginY;
cameraEndZ = c + d + cameraOrginZ;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다