【HLSL】2x2行列、3x3行列の逆行列を計算する

Cluster,Inc. Advent Calendar 2018、11日目の記事です。

qiita.com

概要

HLSLにて、4x4行列の逆行列を計算する処理は見つかったんですが、2x2、3x3が見当たらなかったので書いてみました。

4x4行列はこちら Matrix operations for HLSL · GitHub

2x2行列

float2x2 Invert(float2x2 m)
{
    return 
        1.0 / determinant(m) *
        float2x2(
            m._m11, -m._m01, 
            -m._m10, m._m00
        );
}

3x3行列

float3x3 Invert(float3x3 m)
{
    return 1.0 / determinant(m) *
        float3x3(
            m._22 * m._33 - m._23 * m._32,       -(m._12 * m._33 - m._13 * m._32),       m._12 * m._23 - m._13 * m._22,
            -(m._21 * m._33 - m._23 * m._31),    m._11 * m._33 - m._13 * m._31,          -(m._11 * m._23 - m._13 * m._21),
            m._21 * m._32 - m._22 * m._31,       -(m._11 * m._32 - m._12 * m._31),       m._11 * m._22 - m._12 * m._21
        );
}