シーンの奥行きをキューブマップテクスチャにレンダリングしようとしていますが、フレームバッファステータスをチェックすると、GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTが返されますが、レンダリングは行われません。明らかに私は何かを見逃しているが、私はそれを理解しているようには見えない、私はここで誰かが私を助けてくれることを望んでいた。私のビデオカードは、OpenGL 4.5をサポートするNVIDIA GeForce 840Mです。以下は、fboにレンダリングを設定する方法です。キューブマップ深度テクスチャにレンダリングするためにOpenGL fboを設定すると、不完全な添付ファイルが表示されるのはなぜですか?
UPDATE:まずは簡単な間違いを処理してみましょう
GLuint texhandle;
glGenTextures(1, &texhandle);
glBindTexture(GL_TEXTURE_CUBE_MAP, texhandle);
for (int i = 0; i < 6; i++) {
glTexImage2D(
GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
GL_DEPTH_COMPONENT24, 1600, 900,
0, GL_DEPTH_COMPONENT, GL_FLOAT, 0
);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
GLuint fbohandle;
glGenFramebuffers(num, &fbohandle);
glBindFramebuffer(GL_FRAMEBUFFER, fbohandle);
glCullFace(GL_BACK);
for (int i = 0; i < 6; i++) {
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
fbohandle,
0
);
}
for (int i = 0; i < 6; i++) {
GLenum cubemapSide = GL_TEXTURE_CUBE_MAP_POSITIVE_X + i;
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, cubemapSide, fbohandle, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawBuffer(GL_NONE);
CheckFramebufferStatus();
RenderScene()
}
ループ外で 'glFramebufferTexture2D'以外のすべてをやってはいけませんか?最初の面を貼り付けたばかりのとき、フレームバッファが不完全であることは驚くことではありません。 – BDL
右は意味がありますが、glFramebufferTexture2Dを使ってレンダリングする面を指定していませんか?とにかく、ループを追加してレンダリングループの前に面を付けても、同じエラーが発生します。 – crimsoncheesecake
glDrawBuffer(GL_NONE);意味がありません... – starmole