2014-11-27 4 views
0

three.js 코드에 문제가 있습니다.두 개의 개별 객체에서 Three.JS의면 정렬 문제.

두 개의면을 선택하여 두 개의 객체를 정렬하고 두 번째면 (및 객체)이 첫 번째 객체의 선택된면의 법선 벡터와 일치하도록 정렬하려고합니다.

지금까지 내가 가진 :

var normalMatrix = new THREE.Matrix3().getNormalMatrix(object.matrixWorld); 
var worldNormal = face.normal.clone().applyMatrix3(normalMatrix).normalize(); 
var normalMatrixRef = new THREE.Matrix3().getNormalMatrix(objectRef.matrixWorld); 
var worldNormalRef = faceRef.normal.clone().applyMatrix3(normalMatrixRef).normalize(); 

여기서 객체가 회전됩니다 내 목적은, 얼굴은 객체의 선택한면이 objectref도가 고정 객체 참조이며, faceRef 개체의 정상 나는 일치시키고 싶다.

object.lookAt(worldNormalRef); 

일에

이전에, 나는

object.up = new THREE.Vector3(0,0,1); 
object.up = worldNormal; 
object.up = face.normal; 

과도 작업 중 하나를 시도하고있다.

object.up 사례가 제대로 작동하지 않습니다. 액션을 수행 할 때 대상 객체 (회전 대상 객체)는 회전하지만면을 올바르게 정렬하지 않습니다. 그것은 임의적이지만 어떤 식 으로든 현재의 회전 (예 : 때때로 (0,1,0) 또는 simliar를 따라 회전 함)에 연결됩니다. 객체를 미리 회전 시키면 조금 회전합니다.

이론적으로 볼 때 나는 올바르게 '최대', 그것은 작동해야하지만이 나던 설정으로 내 faceRef만큼, 그리고 세계 벡터를 사용합니다.

어떤 아이디어?

답변

1

나는 내 코드에서 문제를 발견 앞으로 누군가를 도울 수 있기를 바랍니다.

object.lookAt(worldNormalRef); 
//create a point to lookAt 
var newPoint = new THREE.Vector3(
    object.position.x + worldNormalRef.x, 
    object.position.y + worldNormalRef.y, 
    object.position.z + worldNormalRef.z 
); 

object.up = face.normal;//Z axis up 
object.lookAt(newPoint); 

은 또한 (상기 object.up가 face.normal 위로서 설정되어야한다는 것을주의 :요구 대신 바라 올바르게 작동하기 위해 현재의 오브젝트의 postition 새면 법선를 추가하도록 수정 될 얼굴을 참조 객체의 얼굴에 정렬하고 싶을 때), 위에서 설정된 worldNormal이 아니라 (이 코드 부분을 삭제합니다).