我使用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_COMPONENT
型纹理和GL_DEPTH_ATTACHMENT
-深度频道没有渲染到纹理textureNo
以上。