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は3次元ベクトルであることを特徴とする請求、kはスカラーです。(非3Dベクトルは、入力と出力の線形変換として使用することができるが、一般的に、我々は、3Dグラフィックス、3D線形変換ベクトルを議論します)

3.1.2マトリックス記法(フォーカス)

わずか()

3.1.3ズーム

スケーリング(拡大縮小)は、オブジェクトの変更のサイズを指し、我々一般的に定義されたスケーリング

S(X、Y、Z)=(S1X、S2Y、s3z)

S1、S2、S3三成分Sを表します

ベクトル係数は、S1、S2、S3、X、Y、Z軸のスケーリング、Sは線形変換であり、これは証明されないように、これは、それぞれ、座標系の現在の原点に対する相対変換します

  • Sの変換行列表現をスケーリングについて

S(I)=(s 1、S2 0、S3 * 0)。

S(j)=(s 0、S2 1、S3 * 0)。

S(k)=(s 0、S2 0、S3 * 1)。

だから、スケーリング行列S行列は次のように表されます

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

例:四角形0.5 X軸を絞り込みたい場合は、z軸上の不変の2.0倍のy軸方法は、スケーリング行列Sを用いてもよいです

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

行列Sと最小点座標は、最大値を乗算することにより平方座標正方形であります

3.1.4回転

このセクションでは、我々は最初の2つの部分に分解される軸回転ベクトルVに関する角度θでベクトル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同次座標

私たちは、次のセクションで見ることができ、アフィン変換は線形変換と平行移動の組み合わせ変換であるだけベクトルの大きさの方向、および位置独立を記述しているので、ベクトル、シフト操作は、意味をなさない。したがって、パンニング操作のみ点(すなわち、位置ベクトル)を適用することができます。同次座標で採用機構が設けられており、我々は容易ベクトルと均一な処理を指すことができ、同次座標において、座標は4組に拡張され、第四の座標値に従って説明しますオブジェクトは、具体的には、とすることができる点またはベクトルであり、

  1. (X、Y、Z、0)ベクトルを表します
  2. (X、Y、Z、1)点を表します

3.2.2アフィン変換行列を定義して表します

我々が必要とするすべてを変換しない線形変換を示したので、私たちは、アフィン変換のクラスの関数として知られているマッピングの広い範囲にそれを拡張する必要があり、アフィン変換は、すなわち並進ベクトル線形変換+です

(U)= T(U)+ B

また、行列表記で表すことができます。

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

Anは線形変換行列を表し、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に設定されています

幾何学的な意味アフィン変換行列

わずかに

複合(合成変換)変換

質問:、立方体の8つの頂点が今ある、スケーリング行列Sが存在する回転行列R、変換行列Tを仮定し、私はすることができ、立方体の各頂点に適用されるこれらの3つの連続して変換したいです

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

正味変換マトリックス中に、すなわち、これらのパッケージ3の前に、私たちは動作することを可能にするだけでなく、性能を向上させることができ、行列乗算が連想されるので、行列C = SRTを行うことが可能です

3.4(座標変換)座標変換

  • その後の研究で、我々はポイントまたはベクトルを座標変換するために異なるフレームに直面している、我々は、異なるフレームのキーは座標変換と呼ばれる変換します

  • 座標変換処理では、幾何学的変換自体は発生しないが、基準は、システムの変換オブジェクトの変更を調整します。これとは対照的に、我々はスケーリング、回転、これらの操作の翻訳は、ジオメトリが実質的な変化を遂げたを考慮することができます

  • コンピュータグラフィックスでは、我々は多くの異なる座標系を使用しますので、とき点の座標とベクトル変換位置は、以下の、関係なく、ベクトルのため、異なる属性のポイントであることから、それらの間で変換する方法を学ぶ必要があります私たちは、導入の分離を行います。

3.4.1形質転換ベクター座標

考察:ベクトルPがP1 =(X1、Y1)として、フレーム1にセットベクトルp座標、フレームにフレーム1及び2に配置され;フレーム2の座標に対応するベクトルpを取得する方法を次に?

溶液プロセス:少し(メソッドメインアプリケーション翻訳)

答え:P2 =徐+ YV + ZW

U、V、Wにそれぞれフレーム1のx軸、y軸及びz軸方向の単位ベクトルポインティングを表す(フレーム2において行わ表されます)

3.4.2点座標変換

点の位置は重要な特性であるので、点とベクトルと混同することができない、ベクターは単に点法に変換することができないので少し異なる点は、形質転換ベクター座標

溶液プロセス:少し

変換式:P2 =徐+ YV + ZW + Q

y軸及び(示さ2つのフレーム内)のZ軸の正方向にX軸の単位ベクトルでビーコンフレームを表すwはU、Vは、Qは、フレーム2の座標1つのフレームの原点を表します

3.4.3変換行列表現座標

前の2つの段落では、我々は、座標変換ベクトルおよびポイントを導入しています

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

同次座標を使用している場合、上記2つの式、すなわち、単一の式に結合されてもよいです。

(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、それぞれ、3つのフレームが存在すると仮定し、フレーム変換行列の3つのフレームを公知の、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、スケーリング、平行移動及び回転変換行列は、3つの基本的な操作があること。

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軸に対して座標、Y、Z)、フレーム2に対するベクトルであります

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

複数のフレームを切り替えるために、我々は、マトリックス中にマトリックス変換フレームの複数のマージできるように行列乗算は、結合法則を満たしているので、作業効率を向上させることができる6、

図7に示すように、行列Aは、フレームは、逆行列Aは、フレーム1、フレーム2からのマッピングを調整することができる、フレーム2から1にマッピングされることができる座標が

おすすめ

転載: www.cnblogs.com/yaya12138/p/11458617.html