我正在用 OpenGL 编写一个 2D(实际上是 2.5D)等距游戏。为了避免对在某些情况下可能非常复杂的图块进行排序,我正在尝试模拟某种深度缓冲区。对于每个图块,我有两张图像,一张带有颜色信息,一张带有深度信息。
图片1:http : //dl.dropbox.com/u/91457585/depth_buffer_test.png
作为第一种方法,我创建了这些图片。这个想法是将它们相互叠加并使用着色器进行深度测试。在这种情况下,我知道这没有多大意义,但这只是查看它在技术上是否可行的第一种方法。
所以现在我的问题!
下面你会看到着色器的代码。应该将帧缓冲区的深度信息与对象的深度信息进行比较。但是它似乎不起作用,现在我在某处读到这不可能像我那样。
清单:
#version 130
uniform sampler2D colorMap;
uniform sampler2D zMap;
uniform float level;
out vec4 gs_FragColor[ 2 ];
void main(void) {
float z = texture2D( zMap, gl_TexCoord[0].st ).r;
if ( z > gs_FragColor[ 1 ].r ){
gs_FragColor[ 1 ] = vec4( z, 0, 0, 1 );
gs_FragColor[ 0 ] = texture2D( colorMap, gl_TexCoord[0].st ).rgba;
}
}
那么有没有更好的方法来模拟深度缓冲区呢?也许通过写入真正的深度缓冲区?