0
文脈については、私はOpenGLを学んでおり、遠近法の予測を得ました。私の行列乗算(glm :: mat4の演算子*を使って実行)の1つに気付かれるまで、私の三角ピラミッドがなぜ正しく表示されていないのかを確かめようとしていました。その文脈の外で同じ値を持つ2つの行列を乗算しようとしましたが、確かに結果は正しくありませんでした。私がされた乗算しようとしたglm :: mat4 * glm :: mat4不正確な結果が得られますか?
二つの行列:
glm::mat4 left, right;
left[0][0] = 2.09928f; left[0][1] = 0.0f; left[0][2] = 0.0f; left[0][3] = 0.0f;
left[1][0] = 0.0f; left[1][1] = 3.73205f; left[1][2] = 0.0f; left[1][3] = 0.0f;
left[2][0] = 0.0f; left[2][1] = 0.0f; left[2][2] = 1.0202f; left[2][3] = -2.0202f;
left[3][0] = 0.0f; left[3][1] = 0.0f; left[3][2] = 1.0f; left[3][3] = 0.0f;
right[0][0] = 0.999998f; right[0][1] = 0.0f; right[0][2] = -0.00174533f; right[0][3] = 0.0f;
right[1][0] = 0.0f; right[1][1] = 1.0f; right[1][2] = 0.0f; right[1][3] = 0.0f;
right[2][0] = 0.00174533f; right[2][1] = 0.0f; right[2][2] = 0.999998f; right[2][3] = 5.0f;
right[3][0] = 0.0f; right[3][1] = 0.0f; right[3][2] = 0.0f; right[3][3] = 1.0f;
left * right
を使用するには、私が取得:
2.09928, 0, -0.00178059, 0.00352592
0, 3.73205, 0, 0
0.00366393, 0, 6.0202, -2.0202
0, 0, 1, 0
間違っていました。一方、この乗算アルゴリズムで:
inline glm::mat4 Multiply(const glm::mat4& left, const glm::mat4 right)
{
glm::mat4 ret;
for (unsigned int i = 0; i < 4; i++) {
for (unsigned int j = 0; j < 4; j++) {
ret[i][j] = left[i][0] * right[0][j] +
left[i][1] * right[1][j] +
left[i][2] * right[2][j] +
left[i][3] * right[3][j];
}
}
return ret;
}
私が取得:正しい
2.09928, 0, -0.00366393, 0
0, 3.73205, 0, 0
0.00178059, 0, 1.0202,3.08081
0.00174533, 0, 0.999998, 5
。
ここで私は何を間違えていますか?
ありがとうございます!
あなたはそうです。私は彼らのウェブサイトのラインを完全に見逃していました。 GLMに、その特定の乗算に行優先行列を使用したいと言う方法があるとは思いませんか? – Haraven