Metal 入門 -MVP 変換-

3DCG というといわゆる MVP 変換がポイントとなるのだろうが、最近はあっさりと説明してある記事が多いようだ。

確かに環境によっては View 変換を表す行列を準備してくれたりするので、行列の知識も不要であったりするのだが、現在、取り組んでいる環境は Metal だ。

各種行列がAppleから提供されているわけではない。LookAt 関数なんてものはない。

 

(続く)


ModernRendering というサンプルに以下のメソッドが定義されている。

static float4x4 sInvMatrixLookat(float3 inEye, float3 inTo, float3 inUp)
{
    float3 z = normalize(inTo - inEye);
    float3 x = normalize(cross(inUp, z));
    float3 y = cross(z, x);
    float3 t = (float3) { -dot(x, inEye), -dot(y, inEye), -dot(z, inEye) };
    return float4x4  (  float4 { x.x, y.x, z.x, 0 },
                        float4 { x.y, y.y, z.y, 0 },
                        float4 { x.z, y.z, z.z, 0 },
                        float4 { t.x, t.y, t.z, 1 } );
}

以下のように利用されている。

_uniforms.viewMatrix = sInvMatrixLookat(_position, _position + _direction, _up);

inTo が注視点、inEYE が(いわゆる)カメラ座標、inUp がカメラの上方向のベクトルでしょう。

WebGL2入門