キューマップにレンダリングしようとしています。レンダリングされているシーンは地形です。 latitude-longitudeデバッグ表示を使用して、特定のキューブマップの内容を確認します。 左下の2つのデバッグビューは、方向を示すダミーキューブマップと実際のピクチャを持つ1つのキューマップです。キューブへのOpenGLレンダリング
右下の半分のデバッグビューは、私が後になっているキューマップでレンダリングされるものを示しています。
私はカメラの設定にさまざまな組み合わせを試みましたが、どれも論理的な結果を得ていませんでした。私は、動的キューブマップの実装のためにコードをいくつかのサンプルと比較しましたが、私はまだ問題を見つけることができませんでした。私は次に試してみたいことを考えているので、助けや提案は大歓迎です。
描画機能をキューブマップする:
void Draw(GLuint cubemap, glm::ivec2 res, glm::vec3 position)
{
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glBindRenderbuffer(GL_RENDERBUFFER, rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, res.x, res.y);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rb);
// camera
glm::mat4 p = glm::perspective(90.0f, 1.0f, 0.01f, 10.0f);
glm::mat4 v;
glm::vec3 targets[6] = {
glm::vec3(+1.0f, 0.0f, 0.0f),
glm::vec3(-1.0f, 0.0f, 0.0f),
glm::vec3(0.0f, +1.0f, 0.0f),
glm::vec3(0.0f, -1.0f, 0.0f),
glm::vec3(0.0f, 0.0f, +1.0f),
glm::vec3(0.0f, 0.0f, -1.0f)
};
glm::vec3 ups[6] = {
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 0.0f, 1.0f),
glm::vec3(0.0f, 0.0f, -1.0f),
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f)
};
// render
for (int i = 0; i < 6; i++)
{
glViewport(0, 0, res.x, res.y);
// setup target face
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, cubemap, 0);
// setup camera
v = glm::lookAt(position, position + targets[i], ups[i]);
// draw
DrawTerrain(terrain.heightmap, terrain.m, v, p); // model, view, projection matrices
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
「glm」はヘッダーのみなので、「修正依頼」ではなく簡単に修正できます。 'perspective'は' gluPerspective'の1:1のコピーです。これは非常に単純な関数なので、どうやってバグになる可能性があるのかちょっと難解です。 –
'p [2] [2]'の値を見ると、z軸がカメラの方を向いていることを知らないかもしれないと思うかもしれません。 x軸が右に移動し、y軸が上がるので、座標系が右手であると想定される場合、z軸はカメラの方を向ける必要があります。しかし、あなたの行列には負の行列式がありますが、それは間違っています。 –
@AndreasHaferburg私は答えをさらに編集しました。 –