Mik*_*enz 3 opengl-es opengl-es-2.0
我正在尝试使用OpenGL ES 2在3D环境中渲染2D(平面)精灵.我创建每个精灵的方式非常标准:我创建一个由两个三角形组成的四边形,然后将纹理映射到它上面.一切都很好,除了我注意到一些奇怪的东西:当打开深度测试(它应该在3D模式下)时,我的精灵的角落是用背景颜色绘制的.
显示这个的最简单方法是通过插图:
当我关闭深度测试时(在左侧)它看起来很好,但当我打开它(在右边)时,你可以看到绿色精灵的矩形重叠在黄色精灵的顶部.它们都使用相同的代码,相同的PNG文件,相同的着色器.除深度测试外,一切都是一样的.
我希望有人可能知道解决这个问题的方法.
您可以做的是alpha测试.基本上你的纹理必须有一个alpha值为0,它应该是透明的(它可能已经有).然后你配置alpha测试,例如
glAlphaFunc(GL_GREATER, 0.5f);
glEnable(GL_ALPHA_TEST);
Run Code Online (Sandbox Code Playgroud)
这样,具有α值<= 0.5的每个像素(或更好的片段)将不会被写入帧缓冲区(因此不会被写入深度缓冲区).您也可以通过丢弃片段在片段着色器中自己进行alpha测试:
...
if(color.a < 0.5)
discard;
...
Run Code Online (Sandbox Code Playgroud)
那么你不需要固定功能alpha测试(我认为这就是它在现代桌面GL中被弃用的原因,不了解ES).
编辑:在查看ES 2.0规范后,似乎不再有固定功能的alpha测试,因此您必须在片段着色器中执行此操作,如上所述.这样,您还可以使其依赖于特定颜色或任何其他可计算属性而不是alpha通道.
归档时间: |
|
查看次数: |
1294 次 |
最近记录: |