2013-07-26 3 views
0

그래서 원래는 작은 "우주선"에 표적을 추적하는 포탑을 설치하기를 원했습니다. 이것은 그것을위한 jfiddle입니다. http://jsfiddle.net/czGZF/2/ 추적하면 이상하게 작동합니다. 나는이 포물선이 포대가 (원점에 서) 그것의 옆에 slighly 있다고 생각했다.three.js Object3D 로컬 위치 대 글로벌 위치

turret_a.position.y = .25; 
turret_a.position.z = 2; 

그러나, 나는 내가 turret_a의 위치를 ​​변경하면 그래서 내가 '기본 배'

ship = new THREE.Object3D(); 
ship.add(ship_base); 
ship.add(turret_a) ; 

에 추가 (아래)라고 할 때의 상대적인 위치 될 수 있다고했던 배가 우주선에 추가 된 후 우주선이 우주선에 추가 된 후, 포탑은 주로 내가 어떻게 보이길 원했는지 추적했습니다.

내 생각에, lookAt() 함수는 이전 위치를 사용하는 것이지 현재 부모 개체에있는 회전 각도를 결정하는 위치가 아닌 이유는 무엇입니까?

+0

이 Uhmm ... 당신이 내 대답을 읽었다 :

는 바이올린 업데이트? – WestLangley

+0

네, 우주선이 원점에있을 때 우주선이 부풀어 오른다는 것을 알고 있지만, 우주선이 원점에서 멀리 떨어져 있고 아이들이 lookAt를 올바르게 사용할 수 있기를 바랍니다. – Lutcikaur

답변

0

, 당신은 부모 선박이 원점에 위치하며, 회전되지 않는 경우

// This routine does not support objects with rotated and/or translated parent(s) 

귀하의 코드가 작동 표시됩니다. http://jsfiddle.net/czGZF/4/

three.js를 r.59

0

From the API 카메라 객체의 lookAt() 메소드는 사용자가 발견 한 것처럼 세계 위치를 사용하도록 정의됩니다. 이것은 일을 처리하는 비교적 일반적인 방법 인 것 같습니다.

나는 특히 three.js를 API를 사용하여 그 익숙하지 해요,하지만 당신이 볼의 글로벌 위치를 얻으려면, 다음 사용할 수있는 나타납니다 얻을 수

var targetPos = ball.position.clone(); 
ball.localToWorld(targetPos); 

희망을 당신은 당신의 목표에 더 가깝습니다. 불행히도, 당신이 가지고있는 바이올린은 (매우) 비 결정적 인 것처럼 보이므로, 나는 당신을 위해 100 % 해결책을 빨리 얻을 수 없습니다. 당신이 Object3D.lookA()의 코드를 보면

+0

나는 turret_a.lookAt를 시도했다 (turret_a.worldToLocal (ball.position.clone())); 하지만 깜박이고 아무 것도하지 않았습니다. 나는 그러나 그것이 일하게하는 길을 발견했다.. 다소. OP가 업데이트되었습니다. – Lutcikaur

+0

한 문자의 편집으로 업데이트 할 수없는 오타가 있습니다. 'Object3D.lookAt()'와't ' – kontur