2014-04-17 2 views
1

개체를 일반 좌표에서 지구본의 상대 좌표로 변환해야합니다. 나는 아주 좋은 변환 행렬을 계산하고 그것을 아래의 객체로 설정했다. Object.matrixAutoUpdate = false; Object.matrix = 내 행렬; 잘 작동합니다. 그러나 나중에 z에 대한 척도를 수행해야합니다. 자동 업데이트를 사용 중지했기 때문에 아무 일도 없었습니다. 그래서 scale을 변경 한 후에 updateMatrix()를 호출했습니다. 규모가 변경되었지만 변형 행렬이 기본값으로 바뀌 었습니다.Three.js 업데이트 개체의 행렬 및 배율?

내가 잘못 했습니까?

덧붙여서, 행렬을 사용하지 않으면, 오브젝트의 상향 벡터를 변경합니다. 값은 변하지 않습니다. 항상 0,1,0입니다.

답변

1

object.matrix을 수정할 때 object.matrixWorldNeedsUpdate ~ true으로 설정해야합니다.

+0

그래도 문제가되지 않습니까? WebGLRenderer에서 모든 자식 월드 행렬을 강제로 업데이트하는 것으로 보이는'scene.updateMatrixWorld()'를 호출하여'updateMatrixWorld (true)'를 호출하는 것을 볼 수 있습니다. 따라서 renderer.render() 매 틱마다'object.matrix'를 수정할 때마다'object.matrixWorldNeedsUpdate'를'true'로 설정할 필요가 없습니다. – trusktr

0

개체 행렬을 사용하려는 경우 matrixAutoUpdate를 false로 설정합니다. 여기서 변환을위한 코드가 x, y, z 시퀀스로 회전 한 다음 배율을 조정하고 마지막으로 변환합니다. 이 때 세트 행렬을 변경하지 않은 객체 posiiton, 크기, 회전 정보에 따라 매트릭스를 업데이트하기위한

rM = new THREE.Matrix4().multiplyMatrices(new THREE.Matrix4().makeRotationY(rV.y), new THREE.Matrix4().makeRotationX(rV.x)); 
rM.premultiply(new THREE.Matrix4().makeRotationZ(rV.z)); 
object.matrix.copy(rM).scale(sV).setPosition(tV); 

여기 당신은 updateMatrix을 사용할 수 없습니다.

+0

라이브러리의 내부 동작에 익숙하지 않고 그 결과를 이해하지 않는 한'matrixAutoUpdate = false'를 설정하지 마십시오. – WestLangley

+0

@WestLangley 결과는 무엇입니까? 나는 3의 바깥에 행렬을 계산하고 있는데, 3의 바깥에있는 행렬을 계산하고 있으며, 모든 객체에 그것들을 적용하고 싶습니다. 나쁜 결과가 있습니까? – trusktr

+1

@trusktr 객체가 정적 인 것으로 알려진 경우에만'matrixAutoUpdate = false'를 설정하십시오. 자세한 정보 [여기] (https://github.com/mrdoob/three.js/pull/3153). – WestLangley