세계 변환에 대한 논의에서는 기본 개념을 소개하고 세계 변환을 설정하는 방법에 대한 세부 정보를 제공합니다.
월드 트랜스포메이션이란?
월드 변환은 모델의 로컬 원점을 기준으로 꼭짓점이 정의된 모델 공간에서 장면의 모든 개체에 공통된 원점을 기준으로 꼭짓점이 정의되는 World Space로 좌표를 변경합니다. 본질적으로, 세계 변환은 세계에 모델을 배치; 따라서 해당 이름입니다. 다음 다이어그램에서는 세계 좌표계와 모델의 로컬 좌표계 간의 관계를 보여 줍니다.
세계 좌표와 로컬 좌표가다이어그램
세계 변환에는 번역, 회전 및 크기 조정의 조합이 포함될 수 있습니다.
월드 매트릭스 설정
다른 변환과 마찬가지로 일련의 행렬을 효과의 합계를 포함하는 단일 행렬로 연결하여 세계 변환을 만듭니다. 가장 간단한 경우 모델이 세계 원점이고 해당 로컬 좌표 축이 세계 공간과 같은 방향을 지정하는 경우 세계 행렬은 ID 행렬입니다. 더 일반적으로 월드 매트릭스는 세계 공간으로의 변환과 필요에 따라 모델을 회전하는 하나 이상의 회전의 조합입니다.
다음 예제에서는 C++로 작성된 가상의 3D 모델 클래스에서 D3DX 유틸리티 라이브러리에 포함된 도우미 함수를 사용하여 모델 방향을 지정하는 세 개의 회전과 세계 공간에서의 위치를 기준으로 위치를 재배치하는 변환을 포함하는 월드 매트릭스를 만듭니다.
/*
* For the purposes of this example, the following variables
* are assumed to be valid and initialized.
*
* The m_xPos, m_yPos, m_zPos variables contain the model's
* location in world coordinates.
*
* The m_fPitch, m_fYaw, and m_fRoll variables are floats that
* contain the model's orientation in terms of pitch, yaw, and roll
* angles, in radians.
*/
void C3DModel::MakeWorldMatrix( D3DXMATRIX* pMatWorld )
{
D3DXMATRIX MatTemp; // Temp matrix for rotations.
D3DXMATRIX MatRot; // Final rotation matrix, applied to
// pMatWorld.
// Using the left-to-right order of matrix concatenation,
// apply the translation to the object's world position
// before applying the rotations.
D3DXMatrixTranslation(pMatWorld, m_xPos, m_yPos, m_zPos);
D3DXMatrixIdentity(&MatRot);
// Now, apply the orientation variables to the world matrix
if(m_fPitch || m_fYaw || m_fRoll) {
// Produce and combine the rotation matrices.
D3DXMatrixRotationX(&MatTemp, m_fPitch); // Pitch
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
D3DXMatrixRotationY(&MatTemp, m_fYaw); // Yaw
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
D3DXMatrixRotationZ(&MatTemp, m_fRoll); // Roll
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
// Apply the rotation matrices to complete the world matrix.
D3DXMatrixMultiply(pMatWorld, &MatRot, pMatWorld);
}
}
world 행렬을 준비한 후 IDirect3DDevice9::SetTransform 메서드를 호출하여 첫 번째 매개 변수에 대한 D3DTS_WORLD 매크로를 지정하여 설정합니다.
메모
Direct3D는 여러 내부 데이터 구조를 구성하기 위해 설정한 월드 및 뷰 행렬을 사용합니다. 새 세계 또는 뷰 행렬을 설정할 때마다 시스템은 연결된 내부 구조를 다시 계산합니다. 이러한 행렬을 자주 설정하는 경우(예: 프레임당 수천 번) 계산에 시간이 많이 걸립니다. 세계와 뷰 행렬을 월드 매트릭스로 설정한 월드 뷰 행렬로 연결한 다음 뷰 행렬을 ID로 설정하여 필요한 계산 수를 최소화할 수 있습니다. 필요에 따라 월드 매트릭스를 수정, 연결 및 재설정할 수 있도록 개별 세계의 캐시된 복사본을 유지하고 행렬을 봅니다. 명확히 하기 위해 이 설명서에서 Direct3D 샘플은 이 최적화를 거의 채택하지 않습니다.
관련 항목