올바른 월드 매트릭스에 대한 스케일, 회전 및 변환 매트릭스를 곱하는 올바른 순서는 무엇입니까?


62

그것이 중요하다면 DirectX를 플랫폼으로 가정하십시오. (아직 확실하지 않음)

적절한 스케일, 회전 및 변환 매트릭스가 있다고 가정하면 어떤 순서로 곱하여 올바른 월드 매트릭스를 생성합니까?

"적절한"이라는 말은 "직접 사용하여 DirectX에 바로 던져 가장 일반적으로 사용되는 3D 프레임을 얻을 수 있습니다"라는 의미입니다.


6
다음은 "회전 후 번역"(회전)과 "번역 후 회전"(선회)에 대한 설명 입니다.
bobobobo

링크는 좋지만 약간의 오류가 있습니다. 그것은 회전 효과가 아니고 회전하지 않아야한다. 구체가 번역에 의해 그것의 위치 (축에 남아있는)에서 멀어 지는 경향이 있기 때문이다.
infoclogged.

답변:


77

일반적으로 스케일, 회전 및 마지막 변환입니다. 행렬 표시 (즉, 변환 행렬의 경우 T, 회전 행렬의 경우 R, 스케일링 행렬의 경우 S)를 사용하면 다음과 같습니다.

T * R * S

그러나 특정 점을 기준으로 개체를 회전하려면 크기, 점 변환, 회전 및 마지막 개체 변환이 필요합니다.

이유 : 먼저 번역이 제대로 작동하도록 개체의 크기를 조정하려고합니다. 그런 다음 조정 된 축에서 평행 이동이 수행되도록 축을 회전시킵니다. 마지막으로 객체를 해당 위치로 변환합니다.

OpenGL에서는 gluLookAt를 사용하여 한 번의 호출로 전체 카메라 변환을 수행 할 수 있습니다. DirectX에 대한 비슷한 호출이있을 수 있습니다.


11
그리고 중심을 중심으로 변형하려면 먼저 중심을 원점에 있도록 오프셋으로 변환 한 다음 사용자 392858에서 언급 한대로 동일한 양만큼 원점에서 다시 다시 변환해야합니다. 그러나 일반적으로 이것은 2D에서만 필요합니다. 스프라이트는 원점에서 왼쪽 상단에 있습니다.
엔지니어

큰. :) 이제 모델이 왜 수평 뷰에서 반전되고 방향 라이트의 도트 제품이 수직 뷰에서 반전 된 이유를 알아야합니다. 그렇게하는 데 익숙하지 않았지만 수학을
고쳤습니다

참고로 잘못 배치 한 음수 부호를 싫어 합니다. 어쨌든, 감사합니다.이 질문으로 끝낼 수 있습니다. :)
마우스 Narf

문제 없습니다. 항상 도와 드리겠습니다.
Raphael R.

2
@Matthias 내가 아는 한, 변환하려는 벡터를 곱하는 방법에 달려 있습니다. M * v를 곱하면 예, 대답의 순서가 반대입니다.
bialpio

-4

변환 회전 및 스케일링은 작업을 수행하는 순서입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.