【发布时间】:2010-04-08 19:02:58
【问题描述】:
我正在尝试实现一种老式技术,其中使用渲染的背景图像和预设深度信息来遮挡场景中的其他对象。
因此,例如,如果您有一张房间的图片,前景中有一些电线悬挂在天花板上,这些电线在深度图中会被赋予一个浅深度值,并且在正确渲染时,允许角色在“后面”行走电线,但在房间里的其他物体前面。
到目前为止,我已经尝试使用以下方法创建深度纹理:
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Image.GetWidth(), Image.GetHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels);
然后只是将它绑定到一个四边形并在屏幕上渲染它,但它不会从纹理中写入深度值。
我也试过了:
glDrawPixels(Image.GetWidth(), Image.GetHeight(), GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pixels);
但这会将我的帧速率减慢到大约 0.25 fps...
我知道您可以通过将 gl_fragDepth 设置为纹理中的值来在像素着色器中执行此操作,但我想知道是否可以使用未启用像素着色器的硬件来实现此目的?
【问题讨论】:
-
我同意 GLSL 是要走的路。总是令人惊讶的是,这并不容易做到。当您以交互方式更改复杂场景的一小部分时,它非常有用。
标签: opengl buffer textures depth