2013-09-23 2 views
0

3 개의 벡터를 포함하는 클래스가 있다고 가정합니다 (하나는 위치, 하나는 회전, 하나는 회전). 객체의 위치, 회전 및 크기를 상징하는 변형 행렬을 생성하는 데 사용할 수 있습니다. 그런 다음 부모를 추가합니다./개체 간의 자식 관계와 부모의 전역 변환 행렬에 자식의 로컬 변환 행렬을 곱하면 자식의 전역 행렬을 얻습니다.이 개체를 렌더링에 사용하기 때문에 부모가 회전하면 자식이 궤도처럼 회전합니다 이제는 자식의 로컬 변환 (전체 행렬이 아니라 별도의 구성 요소)을 얻을 수 있어야합니다. 나는 자식의 전역 변환을 알고 부모의 전역 변환을 알고 있습니다. 나는 아이의 지역을 곱하여 변환 얻을 수글로벌 위치/회전/스케일에서 로컬 위치/회전/스케일을 업데이트 하시겠습니까?

아이의 글로벌 정말 구체적으로이 작업을 수행 할 수 있어야 부모의 변환 inversed.However로 변환 :

1.To는 아이의 로컬 위치를 얻을 수있을 글로벌 위치와 부모의 글로벌 지위를 아는 것만으로 WITHOUT 모든 매트릭스를 생성합니다.

2. 전역 회전 및 부모의 전역 순환을 알기 만하면 자녀의 로컬 순환을 얻을 수 있습니다. WITHOUT은 모든 매트릭스를 생성합니다.

3. 어린이의 지역 규모를 알기 만하면 지구 규모와 부모의 지구 규모를 알 수 있습니다 WITHOUT은 모든 매트릭스를 생성합니다.

+1

음, 무엇을 시도 했습니까? 정확히 1 점에 대한 귀하의 문제는 무엇입니까? – Hulk

+0

음 Unity3D의 시스템처럼 똑똑해야합니다. Unity3D에서 객체의 회전을 변경할 때마다 객체의 위치가 자동으로 바뀌므로 회전합니다. 기본적으로 모든 시간마다 업데이트해야합니다. 하지만 내가 할 수있는 유일한 방법은 행렬을 생성하는 것입니다. 더 빠른 방법이 있는지 모르겠습니다. –

+1

매트릭스를 생성하고 싶지 않은 이유를 설명해 주시겠습니까? 아마도 최종 목표를 말할 수 있다면 우리는 변형 행렬 생성을 피하는 중간 목표에 집중하는 대신에 도달 할 수 있습니다. – Michael

답변

1

그 답을 따로 원한다면 상당히 답답합니다 (즉, 자녀의 상대 변위를 얻으려면 자녀의 분열 위치를 빼십시오). 그러나 나는 당신이 그들 모두를 함께 재구성하고자한다고 가정합니다. 수학 계산을 시작하면 방정식 시스템을 이해할 수 있습니다 (회전은 변위 등을 고려해야합니다). 문제는 계산이 행렬을 반전하고 곱셈을하는 것과 완벽하게 동등한 것입니다 (계산의 수와 동일한 수). 따라서 어쨌든 그것을 수행하여 아무 것도 얻지 못합니다 (실수로 만들거나 만들 수 있습니다. 캐시가 적다).

일반적으로 이런 것들을 디자인하는 것은 스택을 사용하고 항상 부모와 관련된 변경 사항을 유지하는 것입니다. 그런 다음 여러분이 무언가를하고 싶을 때, 여러분은 객체 계층 구조를 거치면서 행렬을 계속 곱해서 스택을 유지하면서 부모 위로 이동할 때 행렬의 역 승산 대신 스택에서 팝을합니다. 이 방법을 사용하면 매우 좋은 성능을 얻을 수 있으며 개체가 더 많은 계산을 수행하지 않기 때문에 개체가 더 안정적입니다. 역행렬을 곱하면 거의 완전한 항등 행렬을 제공하지 않습니다.

관련 문제