私は通常のキューブ(-1、-1,1,1,1)と私のカメラマトリックス(ビューと投影)を持っています。 投影行列は透視投影です。 特定のカメラからどの領域が見えるかを見たいと思います。私は錐台のように私の立方体を伸ばして、私は他のカメラからの結果を見ることができるようにしたいことを視覚化する。ワールドコーディネートとして視聴錐体を取得
マイIdear:
はviewProjectionMatrixの逆を取得し、それを私のcubecoordinateを掛け:
glm::vec4 CubeCoordinates[8]{
glm::vec4(-1.0f, -1.0f, 1.0f, 1.0f),
glm::vec4(-1.0f, 1.0f, 1.0f, 1.0f),
glm::vec4(1.0f, 1.0f, 1.0f, 1.0f),
glm::vec4(1.0f, -1.0f, 1.0f, 1.0f),
glm::vec4(-1.0f, -1.0f, -1.0f, 1.0f),
glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f),
glm::vec4(1.0f, 1.0f, -1.0f, 1.0f),
glm::vec4(1.0f, -1.0f, -1.0f, 1.0f) };
glm::mat4 InvertedViewProjectionMatrix = glm::inverse(refCamera.GetViewProjectionMatrix());
for (uint32_t i = 0; i < 8; ++i)
{
CameraEdgesWorldSpace[i] = InvertedViewProjectionMatrix * CubeCoordinates[i];
}
今cubecoordinatesはワールド空間であることと、錐台のようになります。 しかし、アウトカムの座標は間違っています。
viewProjectionMatrixはどこでも好きなので、正しく動作していることを保証できます。
計算が間違っていますか?または私は行列を逆転させるために間違ったコマンドを使用します(私はGLMを初めて使用しています)?
あなたはパースペクティブディバイドがありません。投影(または逆投影)の後、w座標はもはや1になりません。 – BDL
だから私はwで分けなければならない? – Thomas
はい。それでも問題が解決しない場合は、カメラマトリックスの値と除算後の結果ベクトルを示す例を追加してください。 – BDL