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