3

私はJOGLを使用していますが、この質問はOpenGL全般に当てはまります。同様の質問が横たわっているように見えますが、それらはGLSLコードに向けられているか、フレームバッファの内容をコピーすることに関係しているか、または一般的なアドバイスです - の代わりにフレームバッファオブジェクトを使用してglCopyTexSubImage2Dください。

質問

シャドウマッピングをしています。フレーム バッファ オブジェクトを使用して深度チャネルをテクスチャに直接レンダリングするにはどうすればよいですか?

テクスチャとフレーム バッファ オブジェクトを初期化するコード ブロックと、シーンをレンダリングする前にすべてを初期化するコードを投稿していただけますか?

現在、私は使用していますglCopyTexSubImage2D。次のようにテクスチャを初期化します。

glGenTextures(1, &textureNo)
glBindTexture(GL_TEXTURE_2D, textureNo)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL)
glTexParameterf(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY)
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 2048, 2048, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, null)

そして、私はこのようにレンダリングします:

glBindTexture(GL_TEXTURE_2D, textureNo)
glClear(GL_DEPTH_BUFFER_BIT)
drawScene()
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2048, 2048)

これは正常に機能し、テクスチャはシーンの深度チャネルを保持することになります。これは、投影とビューのマトリックスが正しく設定され、ライトの視点からシーンが表示されることを意味します。代わりにフレーム バッファ オブジェクトを使用したいと思います。

フレーム バッファ オブジェクトを使用する代わりにテクスチャに直接レンダリングするには、上記で何を変更する必要がありますか?

編集:

これが私が試したものです。最初にフレーム バッファ オブジェクトを初期化しました。

glGenFramebuffers(1, &fbo)

次に、次のようにレンダリングしました。

glBindFramebuffer(GL_FRAMEBUFFER, fbo)
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, textureNo, 0)
glBindTexture(GL_TEXTURE_2D, textureNo)
drawScene()

GL_RGB上記がタイプおよびのテクスチャで機能することを確認しましたが、タイプ テクスチャおよびタイプGL_COLOR_ATTACHMENT0では機能しないようです- 深度チャネルが上記のテクスチャにレンダリングされません。GL_DEPTH_COMPONENTGL_DEPTH_ATTACHMENTtextureNo

4

1 に答える 1

4
于 2012-09-22T19:19:44.920 に答える