Zip*_*ppy 2 android opacity alpha-transparency point-sprites opengl-es-2.0
我正试图让我的点精灵以正确的不透明度显示.
最初,我在黑色方块上得到了我的精灵纹理.
所以,我在片段着色器中添加了以下内容:
"if(color.a < 0.5) "+
"discard;"+
Run Code Online (Sandbox Code Playgroud)
现在,这似乎有效,因为我的精灵显示没有黑色背景,但是,我的纹理本身是"部分透明" - 并且它没有显示这种部分透明度,它看起来很稳固.这有点难以解释,但我希望你理解我的意思.如果我使用canvas/surfaceview绘制相同的纹理,它会正确显示.
基本上我正在尝试让我的纹理以原始格式显示(即他们在创建它们的软件中进行显示 - 即Gimp/photoshop等).
非常感谢任何帮助 - 谢谢
首先确保你的纹理是由透明的PNG图像通过装载Bitmap有两种RGBA_8888或RGBA_4444配置,这样你就不会失去alpha通道.
其次,您需要GL_BLEND使用glEnable()命令启用.在Android上你会这样写:GLES20.glEnable(GLES20.GL_BLEND);.这允许您将已绘制的颜色与新颜色混合,实现透明外观.混合功能应设置GL_ONE, GL_ONE_MINUS_ALPHA为常规透明度:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);GL_SRC_ALPHA, GL_ONE_MINUS_ALPHA对于常规透明度:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
最后,您不需要使用discard,只需将gl_FragColor第四个通道中的alpha 设置为4分量向量(这是从采样器读取纹理时获得的),例如,gl_FragColor = texture2D(sampler, texCoord);如果您愿意,可以执行此操作.
您很可能必须关闭深度测试,glDisable(GL_DEPTH_TEST)以避免出现未排序三角形的问题.
您可以在这里阅读更多关于透明度的内容.