我正在尝试实现一种旧式技术,其中渲染的背景图像和预设深度信息用于遮挡场景中的其他对象。
例如,如果您有一张房间照片,前景中有一些悬挂在天花板上的电线,这些电线在深度图中被赋予较浅的深度值。正确渲染后,角色可以“穿过”电线,但在房间中的其他物体前面走。
到目前为止,我尝试使用以下方式创建深度纹理:
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
设置为来自纹理的值,在像素着色器中执行此操作,但我想知道是否可以在非像素着色器启用的硬件上实现此操作?