DirectX12 3D 게임 개발 및 제 III의 전투

개 심자

학습 목표

  1. 선형 변환 아핀를 나타내는 행렬을 사용하는 방법을 이해
  2. 형상 크기 조절, 회전 및 번역 학습 좌표 변환
  3. 행렬의 승산의 특성상 변환 행렬의 복수의 단일 순 변환 행렬로 결합
  4. 다른 좌표 시스템 사이의 좌표 변환을 발견하고,이 대표하는 좌표 변환 행렬을 사용하는 방법
  5. 제공되는 변환 행렬의 구성에 대한 구체적 기능 DirectXMath 라이브러리 친숙한

3.1 선형 변환

3.1.1 정의

t의 함수가있는 경우 수

t(u + v) = t(u) + t(v)
t(ku) = tk(u)

설립이 함수는 선형 변환이라고 t의 선형 함수라고한다. U 및 V는 3D 벡터되고, k는 스칼라이다. (비 3D 벡터는 입력과 출력의 선형 변형으로 사용되지만, 일반적으로 우리는 3D 그래픽 차원 선형 변환 벡터를 논의 할 수 있음)

3.1.2 행렬 표기법 (초점)

약간 ()

3.1.3 확대

스케일링 (스케일링) 객체의 크기가 변경을 지칭 우리 일반적 정의 스케일링

S (X, Y, Z) = (S1X, s2y, s3z)

S1, S2, S3는 S 세 성분을 나타내는

벡터 계수 S1, S2, X S3에서 스케일링, Y는 Z 축, S는 선형 변환되도록이이 검증되지 않고, 각각의 좌표 시스템의 현재의 원점을 기준으로 변환

  • S의 변환 행렬 표현 스케일링 소개

S (I) = (S1 (1), (S2) 0, S3 * 0);

S (j) = (S1 0, S2 (1), S3 * 0);

S (K) = (S1 0 S2 0, S3 * 1);

따라서 스케일링 행렬 S 행렬은 다음과 같이 표현된다

{
    s1,0,0,
    0,s2,0,
    0,0,s3
}

예 : Z 축에 그대로 정사각형 0.5 X 축, 2.0 배의 y 축의 방법을 세분화 할 경우 사용될 수있는 스케일링 행렬 S

{
    0.5,0,0,
    0,2,0,
    0,0,0
}

매트릭스 S와 극소 점의 좌표는 사각형이 최대를 승산함으로써 좌표 정사각형

3.1.4 회전

이 섹션은 우리가 처음 두 개의 부분들로 분해 될 축 회전 벡터 (V)에 대한 각 (9)에서 벡터 V의 N에 의해 ​​수학적으로 설명하고, 평행 한 부분은 N과 평행이고, n은 회전하는 동안, 다른 부분에 직교 n 개의 부분은 변경되지 않은 상태로 유지하는 것입니다, 그래서 우리는 N의 부분으로 정상을 고려할 필요가 없다.

유도 : 약간

회전 변환 이것은 매트릭스 표현으로 변환 될 수 있고, 또한 선형 변환이다. 회전 변환 행렬은 다음과 같이 표현된다 :

{
    c+(1-c)x^2  (1-c)xy + sz    (1-c)xz-sy
    (1-c)xy-sz  c+(1-c)y^2      (1-c)yz+sx
    (1-c)xz+sy  (1-c)yz-sx      c+(1-c)z^2
}

X는, Y는, Z는 N (X, Y, Z), (S)의 회전축을 나타내는 C는 각각 죄 (세타) 및 COS ​​(세타)를 나타내고

예 : 약간

3.2 아핀 변환

3.2.1 동차 좌표

다음 섹션에서 볼 수 있고, 아핀 변환은 선형 변환하고, 변환의 조합 변환 인 경우에만, 벡터 크기의 방향 및 위치에 독립적를 설명하기 때문에, 벡터의 시프트 연산은, 이해되지 않는다. 따라서, 패닝 동작은 점 (즉, 위치 벡터)를 적용 할 수있다. 제공된 동차 좌표에 사용되는기구는, 우리는 쉽게 동차 좌표에서의 좌표를 네 튜플로 확장되며, 벡터 균일 한 처리를 가리킬 수이며, 네 번째의 좌표 값에 따라 설명한다 특히, 목적 지점 또는 벡터 일 수있다

  1. (X는, Y는 Z, 0) 벡터를 나타낸다
  2. (X는, Y는 Z 1) 점을 나타내고

3.2.2 아핀 변환 행렬을 정의 나타낸다

우리가 필요한 것은 변형되지 않은 선형 변환를 표시하고 있으므로, 아핀 변환의 클래스의 함수로서 공지 매핑 넓은 범위로 확장해야 아핀 변환 즉 역 벡터의 선형 변환 +이고

A (U)은 t = (U) + B

또한 행렬 표기법으로 표현 될 수있다 :

{
    A1  A2  A3  0
    A4  A5  A6  0
    A7  A8  A9  0
    Bx  By  Bz  1
}

선형 변환 행렬을 나타내고, Bx로는 저자가, Bz의 번역은 벡터 B 인

3.2.3 번역

아이덴티티는 선형 변환이 직접 입력 파라미터를 반환하는 변환, 즉, t (U) = U; 보이지, t 선형 변환 행렬은 행렬로 표현된다. 번역 변형은 이제 항등 변환하는 선형 변환 인 아핀 변환으로 정의되며, 아핀 변환식은 번역

t (u) = uI + b = u + b

어디 행렬이다.

다음과 같이 번역 변환 행렬 표현 :

{
    1   0   0   0
    0   1   0   0
    0   0   1   0
    Bx  By  Bz  1
}

Bx로, 저자, Bz의은 변환 벡터 (B)의 각 구성 요소 인 것을

3.2.4 아핀 스케일링 및 회전 행렬

병진 벡터 B (0,0,0,1)에 첨가하면서 회전 행렬과 4 × 4 행렬로 확대 스케일링 행렬은 각 행 벡터 w 즉 값이 0으로 설정되고

기하학적 의미 아핀 변환 행렬

약간

합성 (합성 변환) 변환

질문 : 큐브 이제 여덟 개 정점, I 큐브의 각 정점에인가 3이 순차적으로 변환하고자가, 스케일링 행렬 S, 회전 행렬 R, 변환 행렬 T가 가정 될 수있다

((Vi S) R) T        //其中Vi为正方体的每一个顶点

행렬 곱셈은 결합이기 때문에, 행렬 C = SRT하게 할 수있다; 순 변환 행렬에이 패키지 (3) 전에, 즉, 우리가 조작 할 수 있으며, 또한 성능을 향상시킬 수있다

3.4 변형 (좌표 변환) 좌표

  • 후속 연구에서, 우리가 점 또는 벡터를 좌표로 변환하기 위해 다른 프레임을 직시해야, 우리는 다른 프레임 키 변환 좌표라고 변환

  • 좌표 변환 공정에서, 기하학적 변형 자체가 발생하지 않고, 상기 기준 시스템의 변환 개체 변경 좌표. 반면에, 우리는 크기 조절, 회전, 이러한 작업의 번역 형상 상당한 변화를 겪고 있었다 고려할 수

  • 컴퓨터 그래픽에서, 우리는 다른 많은 좌표계를 사용합니다, 따라서 매우 다른, 위치에 관계없이 벡터, 속성 포인트이기 때문에, 그들 사이의 변환 방법을 배울 필요가있을 때 점 및 벡터 변환의 좌표, 아래 우리는 소개를 분리합니다.

3.4.1 형질 전환 벡터 좌표

고찰 : 벡터 P는 프레임에서 프레임 1과 2 위치에있어서, P1 = (X1, Y1)와 같은 프레임 (1)에 설정된 벡터 P의 좌표, 다음 방법에 프레임 (2)의 좌표에 대응하는 벡터 (P)을 구하는 ?

해결 방법 : 조금 (방법 기본 응용 프로그램 번역)

대답 : P2 = 쑤 YV + + ZW

이 U, V는, 각각 W (1), X 축, Y 축 및 Z 축 방향은 상기 프레임 단위 벡터 좌표를 나타내는 (프레임 수행하여 표현 2)

3.4.2 점 좌표 변환

색다른 점이 포인트 벡터와 혼동 할 수 있으므로 점의 위치가 중요한 특성 때문에, 변환 좌표 벡터 및 상기 벡터는 단순히 포인트 방법에 변환 할 수없는

해결 방법 : 조금

변환 공식 : P2 = 쑤 YV + + + Q ZW

Y 축 및 Z 축 (2 개 프레임으로 표시)의 양 방향의 X 축 방향의 단위 벡터에 비콘 프레임을 나타내는 승 U는 V는 Q 좌표를 프레임 (2)의 1 프레임의 원점을 나타낸다

3.4.3 변환 행렬 표현 좌표

이전 두 단락에서, 우리는 변환 벡터와 좌표 점을 도입 한

(x',y',z') = xu + yv + zw           //对于向量而言
(x',y',z') = xu + yv + zw + Q       //对于点而言

동차 좌표를 사용하는 경우, 위의 두 가지 수식, 즉 하나의 식으로 결합 될 수있다 :

(x',y',z',w) = xu + yv + zw + Q

좌표 변환을, 없으면 0 = (W)의 상기 화학식에서, 우리는 단지 하나의 수식을 기억할 수 있도록 1은 점으로 표시된다 벡터 = W했다. 상기 화학식 행렬은 다음과 같이 표현된다 :

{
    u1  u2  u3  0
    v1  v2  v3  0
    w1  w2  w3  0
    Q1  Q2  Q3  1
}

이 행렬은 프레임 좌표 변환 행렬 또는 변환 행렬이라고

3.4.4 변환 매트릭스와 연산 좌표

질문 : 세 프레임 각각 1,2,3 및 프레임 변환 행렬의 알려진 세 프레임도를 A, B, C, P 프레임 (1)의 좌표, 벡터가되어있는 가정 이 벡터는 프레임 (3)에 대응하는 좌표를 필요로 될 수있다

(PB)C = p';

다음 PH = P '를 사용할 수 있지만, 이러한 연산은 행렬 곱셈 연관 때문에, 우리는 H = BC 할 수없는 효율적인 전환을 완료 할 수있다

3.4.5 변환 행렬과 그 역행렬을 조정

약간

3.5 변환 행렬 및 변환 행렬을 조정

위의 요약하면, 우리는 좌표 변환을 변형 (크기 조절, 회전 및 번역) "형상 자체가 변경"과 구별 강조했다, 그러나,이 절에서, 우리는 그것을 증명합니다 :보기의 수학적 관점에서 모두 그것은 동일합니다.

증명 : 약간

함수 라이브러리가 3.6DirectXMath을 제공 변환

이 섹션에서 우리는 함수 라이브러리를 DirectXMath하고 미래에 대한 참조를 위해 관련 요약입니다 변환.

//构建一个缩放矩阵
XMMATRIX XM_CALLCONV XMMatrixScaling(
    float ScaleX,       //缩放系数
    float ScaleY,       //缩放系数
    flaot ScaleZ        //缩放系数
)
//用一个3D向量中的分量来构建一个缩放矩阵
XMMATRIX XM_CALLCONV XMMatrixScalingFromVector(
    FXMVECTOR Scale;    //缩放系数(Sx,Sy,Sz)
);
//构建一个绕x轴旋转的旋转矩阵
XMMATRIX XM_CALLCONV XMMatrixRotationX(
    float Angle         //以顺时间方向旋转Angle弧度
);
//构建一个绕y轴旋转的旋转矩阵
XMMATRIX XM_CALLCONV XMMatrixRotationY(
    float Angle         //以顺时间方向旋转Angle弧度
);
//构建一个绕z轴旋转的旋转矩阵
XMMATRIX XM_CALLCONV XMMatrixRotationZ(
    float Angle         //以顺时间方向旋转Angle弧度
);
//构建一个绕任意轴旋转的矩阵
XMMATRIX XM_CALLCONV XMMatrixRotationAxis(
    FXMVECTOR Axis,     //旋转轴n
    float Angle         //沿n轴正方向看,以顺时针方向按弧度Angle进行旋转
);
//构建一个平移矩阵
XMMATRIX XM_CALLCONV XMMatrixTranslation(
    float OffsetX,      //平移系数 
    float OffsetY,      //平移系数
    float OffsetZ       //平移系数
);
//用一个3D向量中的分量来构建平移矩阵
XMMATRIX XM_CALLCONV XMMatrixTranslationFromVector(
    FXMVECTOR Offset    //平移系数(Sx,Sy,Sz)
);
//计算向量和矩阵的乘积VM,此函数默认w = 1;即针对点计算
XMVECTOR XM_CALLCONV XMVector3TransformCoord(
    FXMVECTOR V,        //输入向量V
    CXMMATRIX M         //输入矩阵M
);
//计算向量和矩阵的乘积VM,此函数默认w = 0;即针对向量计算
XMVECTOR XM_CALLCONV XMVector3TransformNormal(
    FXMVECTOR V,        //输入向量V
    CXMMATRIX M         //输入矩阵M
);

개요

1, 스케일링, 병진 및 회전 변형 행렬은 세 가지 기본 동작이 있음 :

S = 
{
    Sx  0   0   0
    0   Sy  0   0
    0   0   Sz  0
    0   0   0   1
};

T = 
{
    1   0   0   0
    0   1   0   0
    0   0   1   0
    b1  b2  b3  1
};

R = 
{
    c+(1-c)x^2  (1-c)xy + sz    (1-c)xz-sy
    (1-c)xy-sz  c+(1-c)y^2      (1-c)yz+sx
    (1-c)xz+sy  (1-c)yz-sx      c+(1-c)z^2
}

동차 좌표 변환을 사용하여 표현되는 경우 (2), 우리는 1 × 4 동차 좌표는 점 벡터를 설명하는 데 사용. 네번째 요소 w이어서, 1 = W 0 벡터에 점을 설정하는 경우. 이 수 번역은 벡터에 영향을주지 않고, 지점에 적용

행렬에서의 행 벡터를 사용하고, 각 단위 길이에 직교하는 경우 (3), 매트릭스는 직교 매트릭스라고 직교 행렬의 역행렬과 전치 행렬은 동일한, 직교 행렬의 역행렬 용이에 대응 계산. 회전 행렬의 모든 직교 행렬이다

행렬 곱셈 연관 법, 단일 행렬로하므로, 일반적으로 여러 변환 행렬을 만족 때문에 (4), 작업 효율이 향상 될 수 있도록

5 세트 Q, U, V, 1 개 프레임의 기원을 나타내는 W, X 축, Y 축, 상기 프레임 (1)의 좌표에 대응하는 벡터 (P) 인 경우에는, 프레임 (2)의 좌표 (x와 z 축에 대하여 (2)가 상기 프레임에 대한 Y, Z)의 좌표 벡터

p' = xu + yv + zw;              //针对向量
p' = xu + yv + zw + Q;          //针对点(位置向量)

복수의 프레임의 전환을 위해, 우리는 프레임의 복수의 행렬로 변환 매트릭스를 병합 할 수 있도록 행렬 곱셈은 연관 법을 만족 이후 6, 작업 효율을 향상시킬 수있다

행렬 A는 프레임 (2)는 1에 매핑 될 수있다 좌표계 경우 (7)는, 그 역행렬 (A)는 프레임 (1)에 프레임 (2)에서 매핑 좌표 수도

추천

출처www.cnblogs.com/yaya12138/p/11458617.html