嗨,当你在一帧中有3个摄像头活动时,我在应用后期效果方面遇到了很多麻烦。
第一台相机 - 它呈现游戏的游戏部分。 第二个摄像头 - GUI层。 第三台摄像机 - 背景和动画。
在这里,我试图在第一台相机上应用后期处理效果,如模糊和绽放,效果很好但是这里出现了问题,而后期效果已启用GUI,背景动画不可见,但我确信它们已被绘制。 如果我将所有摄像机作为输入渲染目标,那么我可以看到该场景中的所有对象。
不知道为什么会发生这种情况,任何人都可以向我解释一下可能是什么原因,谢谢你。 这里我添加Opengl调用日志,看看我到底在做什么。
在启用后期效果后,问题出在Stats_layer和HudPage_layer上。
Marker: SceneBegin: ClearCamera
glBindFramebufferEXT(GL_FRAMEBUFFER, 2)
glClearColor(0, 0, 0, 1)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, {1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_PROJECTION)
glLoadMatrixf({2.7457316, 0, 0, 0} {0, 0, 1.0001999, 1} {0, 1.8304877, 0, 0} {0, 0, -0.20001999, 0})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
Marker: RenderGroup: ClearCamera - Opaque
Marker: RenderGroup: ClearCamera - Immediate
Marker: RenderGroup: ClearCamera - Transparent
Marker: RenderGroup: ClearCamera - Overlay
Marker: PostProcess: PMaterial_GodRays_RadialBlur__2
glBindFramebufferEXT(GL_FRAMEBUFFER, 2)
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_PROJECTION)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glColor4f(0, 0, 0, 1)
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, {0, 0, 0, 1})
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, {0, 0, 0, 1})
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, {0, 0, 0, 1})
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0)
glActiveTexture(GL_TEXTURE0)
glDisable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, 0)
glMatrixMode(GL_TEXTURE)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glUniform2fv(0, 1, {0.5, 0.49836433})
glUniform1fv(1, 1, {0.050000001})
glActiveTexture(GL_TEXTURE1)
glBindTexture(GL_TEXTURE_2D, 88) [Context 1 - Texture 88: Context 1 - Texture 88]
glUniform1i(2, 1)
glBindBuffer(GL_ARRAY_BUFFER, 163)
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, 32, 0x00000000)
glEnableClientState(GL_NORMAL_ARRAY)
glNormalPointer(GL_FLOAT, 32, 0x0000000C)
glClientActiveTexture(GL_TEXTURE0)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
glTexCoordPointer(2, GL_FLOAT, 32, 0x00000018)
glEnableVertexAttribArray(0)
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 32, 0x00000000)
glEnableVertexAttribArray(1)
glVertexAttribPointer(1, 2, GL_FLOAT, FALSE, 32, 0x00000018)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 164)
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0x00000000)
glDisableClientState(GL_VERTEX_ARRAY)
glDisableClientState(GL_NORMAL_ARRAY)
glClientActiveTexture(GL_TEXTURE0)
glDisableClientState(GL_TEXTURE_COORD_ARRAY)
glDisableVertexAttribArray(0)
glDisableVertexAttribArray(1)
Marker: SceneBegin: ClearCamera
glBindFramebufferEXT(GL_FRAMEBUFFER, 3)
glClearColor(0, 0, 0, 1)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, {1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_PROJECTION)
glLoadMatrixf({2.7457316, 0, 0, 0} {0, 0, 1.0001999, 1} {0, 1.8304877, 0, 0} {0, 0, -0.20001999, 0})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
Marker: RenderGroup: ClearCamera - Opaque
Marker: RenderGroup: ClearCamera - Immediate
Marker: RenderGroup: ClearCamera - Transparent
Marker: RenderGroup: ClearCamera - Overlay
Marker: PostProcess: PMaterial_GodRays_RadialBlur__3
glBindFramebufferEXT(GL_FRAMEBUFFER, 3)
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_PROJECTION)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glColor4f(0, 0, 0, 1)
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, {0, 0, 0, 1})
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, {0, 0, 0, 1})
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, {0, 0, 0, 1})
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0)
glActiveTexture(GL_TEXTURE0)
glDisable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, 0)
glMatrixMode(GL_TEXTURE)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glUniform2fv(0, 1, {0.5, 0.49836433})
glUniform1fv(1, 1, {0.1})
glActiveTexture(GL_TEXTURE1)
glBindTexture(GL_TEXTURE_2D, 87) [Context 1 - Texture 87: Context 1 - Texture 87]
glUniform1i(2, 1)
glBindBuffer(GL_ARRAY_BUFFER, 163)
glEnableClientState(GL_VERTEX_ARRAY)
glVertexPointer(3, GL_FLOAT, 32, 0x00000000)
glEnableClientState(GL_NORMAL_ARRAY)
glNormalPointer(GL_FLOAT, 32, 0x0000000C)
glClientActiveTexture(GL_TEXTURE0)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
glTexCoordPointer(2, GL_FLOAT, 32, 0x00000018)
glEnableVertexAttribArray(0)
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 32, 0x00000000)
glEnableVertexAttribArray(1)
glVertexAttribPointer(1, 2, GL_FLOAT, FALSE, 32, 0x00000018)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 164)
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0x00000000)
glDisableClientState(GL_VERTEX_ARRAY)
glDisableClientState(GL_NORMAL_ARRAY)
glClientActiveTexture(GL_TEXTURE0)
glDisableClientState(GL_TEXTURE_COORD_ARRAY)
glDisableVertexAttribArray(0)
glDisableVertexAttribArray(1)
Marker: SceneBegin: STATS_LAYER
wglMakeCurrent(0x8C0119F2, 0x00010000)
glBindFramebufferEXT(GL_FRAMEBUFFER, 0)
glViewport(0, 0, 640, 960)
glScissor(0, 0, 640, 960)
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, {1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_PROJECTION)
glLoadMatrixf({1, 0, 0, 0} {0, 0, 0.0066666668, 0} {0, 0.66666669, 0, 0} {0, 0, -0.33333334, 1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
Marker: RenderGroup: STATS_LAYER - Opaque
Marker: RenderGroup: STATS_LAYER - Immediate
Marker: RenderGroup: STATS_LAYER - Transparent
Marker: RenderGroup: STATS_LAYER - Overlay
Marker: SceneBegin: HUDPAGE_LAYER
wglMakeCurrent(0x8C0119F2, 0x00010000)
glBindFramebufferEXT(GL_FRAMEBUFFER, 0)
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, {1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
glMatrixMode(GL_PROJECTION)
glLoadMatrixf({1, 0, 0, 0} {0, 0, 0.0066666668, 0} {0, 0.66666669, 0, 0} {0, 0, -0.33333334, 1})
glMatrixMode(GL_MODELVIEW)
glLoadMatrixf({1, 0, 0, 0} {0, 1, 0, 0} {0, 0, 1, 0} {0, 0, 0, 1})
Marker: RenderGroup: HUDPAGE_LAYER - Opaque
Marker: RenderGroup: HUDPAGE_LAYER - Immediate
Marker: RenderGroup: HUDPAGE_LAYER - Transparent
答案 0 :(得分:0)
上述问题的问题在于我在应用后期处理之前/之前绘制对象的方式。
例如,如果我有2次传球:
- 不透明。
- 透明。
醇>
然后我应该在不透明传递中绘制不透明对象,在后者中绘制透明对象。
但出于某种原因(Noob me!)我正在透明传递中绘制不透明物体。
我必须做很多调试才能找到root问题。 我想如果我们想要制作图形,我们会在开始添加效果和内容之前按顺序放置东西。
虽然学到了一些教训(希望我能通过制作示例项目来解释情况,尽快发布代码答案)。