1

私たちが持っているとしましょう:

Vector3 vec;//has some random values
Matrix4x4 mat;//has some random values as well

ここで、それらを乗算して Vector3 を取得したいと考えています。

Vector3 mult = vec * mat;

この機能は次の条件を満たすでしょうか。

void Matrix4x4::Transform( Vector3 &oPoint )
{
    float fX = oPoint.GetX();
    float fY = oPoint.GetY();
    float fZ = oPoint.GetZ();

    oPoint.SetX( fX * this->matrix[0][0] + fY * this->matrix[0][1] + fZ * this->matrix[0][2] + this->matrix[0][3]);
    oPoint.SetY( fX * this->matrix[1][0] + fY * this->matrix[1][1] + fZ * this->matrix[1][2] + this->matrix[1][3]);
    oPoint.SetZ( fX * this->matrix[2][0] + fY * this->matrix[2][1] + fZ * this->matrix[2][2] + this->matrix[2][3]);
}

そうでない場合は、私を正しい方向に導くことができますか。

4

1 に答える 1

1

あなたのコードは問題ないようです。OpenGL を使用しているため、行列は列優先順であり、サイズ 3 のベクトルを 4x4 行列に乗算する場合、4 番目のベクトル座標は1.

しかし、明らかにコンピュータ グラフィックスを行っているため、座標が同次であるため、サイズ 4 のベクトルを使用する必要があります。また、なぜ行列にベクトルを乗算したいのか、その逆はしたくないのか、よくわかりません。

于 2012-10-04T16:38:27.440 に答える