2017-05-21 3 views
0

메신저를 움직여서 3 개의 j로 카메라를 이동하려고합니다. 모든 것이 제대로 작동하고 메신저는 무엇 내가 지금 추가 할 것은 카메라 (위치 0/0 인 원에 중간을 얻을 수 있다는 것입니다 -1에서 1까지의 위치를 ​​얻을 수 중심 이동 된 원 (카메라) 주위로 카메라 교정

function onMouseMove(event) { 
    mousePosition.x = (event.clientX/window.innerWidth) * 2 - 1; 
    mousePosition.y = - (event.clientY/window.innerHeight) * 2 + 1; 
} 

를 사용하여 브라우저 화면의). 설명하기가 어렵지만 x 또는 y 값이 -0.5에서 0.5 범위를 벗어날 때까지이 원의 반지름을 중심으로 카메라를 선 위로 이동하려고합니다. 이것은 카메라가 업데이트되는 방식입니다 :

camOffset.x += (mousePosition.x - camOffset.x) * 0.1; 
camOffset.y += (mousePosition.y - camOffset.y) * 0.1; 
camera.position.x += camOffset.x * 30; 
camera.position.y += camOffset.y * 30; 

당신이 나를 도울 수 있기를 바랍니다! 감사!

+0

그래서 경우 , 당신은 카메라 위치가 마우스 위치와 같은 방향을 갖기를 원하지만, 크기가 0.5 인 것이 맞습니까? – Beta

+0

예, 당신은 내가 의미하는 것을 이해했습니다! 추가해야 할 것은, 카메라가 스플라인 위로 움직이면서 이상하게 보이는 효과가 발생하는 카메라의 중심을 정확하게 때리는 것입니다. 그게 왜 그 주위에 그 주위에 약간의 공간을 얻으려고하는지. – yolokas

+0

@ 베타 신뢰할 수있는 솔루션을 알고 계십니까? – yolokas

답변

0

나는 자바 스크립트의 구문을 모르는 (또는이 코드는 무엇이든)하지만,이 같은 작업을해야합니다 : 마우스의 위치가 0.5보다 작은 크기를 가지고

mag2 = camera.position.x * camera.position.x + camera.position.y * camera.position.y; 
if(mag2 < 0.01) // to prevent divide-by-zero if the camera hits the origin 
    camera.position.x = 0.5; 
else 
if(mag2 < 0.25) 
    { 
    k = 0.5/sqrt(mag2); 
    camera.position.x *= k; 
    camera.position.y *= k; 
    } 
+0

정말 고마워요! 그게 아니라 필요한 코드가 아니라 그 도움으로 해결! 감사! – yolokas

1

x, y, z를 phi, theta로 효율적으로 변환하려면 THREE.Spherical()를 사용하십시오. 그것은 당신의 노력을 줄이고 카메라 움직임에 대한 더 나은 이해를 줄 것입니다. 카메라의 세타 만 변경하여 원 안에 회전시킵니다.

var delta = mousePosition.x - camOffset.x; 
    var rotMult = delta * rollSpeed;// adjust this according to your need. 
    var vector = new THREE.Vector3(); 
    var center = new THREE.Vector3(); 
    var spherical = new THREE.Spherical(); 
    vector.copy(camera.position).sub(center); 
    spherical.setFromVector3(vector); 
    spherical.theta += this.rotationVector.y * rotMult; 
    spherical.makeSafe(); 
    vector.setFromSpherical(spherical); 
    camera.position.copy(center).add(vector); 
    camera.lookAt(center); 
+0

게다가 나는 스플라인에 카메라를 움직이고 있는데, 3D 공간에서 자동으로 약간 앞으로 보인다. 나를 위해 작동하도록 코드를 조정하려고 해요! 나는 궤도 제어 장치를 사용해야 만하니? – yolokas

+0

빠른 피들에 코드를 추가 할 수 있습니까? – yolokas

+0

http://jsfiddle.net/cap34u52/1/ –

0
var mag2 = mousePosition.x * mousePosition.x + mousePosition.y * mousePosition.y; 
    var radius = 0.3; 
    if(mag2 < radius){ 
     if(mousePosition.x <=0 && mousePosition.y >=0){ //1 quadrant 
      camOffset.x += ((mousePosition.x - camOffset.x)-radius) * 0.1; 
      camOffset.y += ((mousePosition.y - camOffset.y)+radius) * 0.1;    
     }else if(mousePosition.x >0 && mousePosition.y >=0){ //2 quadrant 
      camOffset.x += ((mousePosition.x - camOffset.x)+radius) * 0.1; 
      camOffset.y += ((mousePosition.y - camOffset.y)+radius) * 0.1;     
     }else if(mousePosition.x <=0 && mousePosition.y <0){ 
      camOffset.x += ((mousePosition.x - camOffset.x)-radius) * 0.1; 
      camOffset.y += ((mousePosition.y - camOffset.y)-radius) * 0.1;     
     }else if(mousePosition.x >0 && mousePosition.y <0){ 
      camOffset.x += ((mousePosition.x - camOffset.x)+radius) * 0.1; 
      camOffset.y += ((mousePosition.y - camOffset.y)-radius) * 0.1;    
     }  
     camera.position.x += camOffset.x * 30; 
     camera.position.y += camOffset.y * 30; 
    }else{ 
     camOffset.x += (mousePosition.x - camOffset.x) * 0.1; 
     camOffset.y += (mousePosition.y - camOffset.y) * 0.1; 
     camera.position.x += camOffset.x * 30; 
     camera.position.y += camOffset.y * 30; 
    }