android - 如何在 OpenGL ES 2.0 中渲染透明纹理
问题描述
大约两天以来,我感到失望:
对于我当前的项目,我导致使用带有透明部分的纹理(png),而渲染它的结果不是预期的,而是黑色像素,在那里它们应该是透明的......
与混合:预期纹理的其余部分与蓝色透明颜色混合
经过研究,我得出结论,可能存在三个问题:
- (我认为最有可能):它的原因是我的着色器(可能是因为它不会乘以 alpha 值)
- :它的混合模式(我用这个
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
:) - :它是我加载纹理的方式(我从我的主要信息源复制粘贴它)
主要信息来源:http ://androidblog.reindustries.com/android-opengl-es-2-0-shaders-series-002-texture-shaders/
基于这个站点改变了我以前的着色器:
public static final String vs_Image =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"attribute vec4 a_Color;" +
"attribute vec2 a_texCoord;" +
"varying vec4 v_Color;" +
"varying vec2 v_texCoord;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
" v_texCoord = a_texCoord;" +
" v_Color = a_Color;" +
"}";
public static final String fs_Image =
"precision mediump float;" +
"varying vec2 v_texCoord;" +
"varying vec4 v_Color;" +
"uniform sampler2D s_texture;" +
"void main() {" +
" gl_FragColor = texture2D( s_texture, v_texCoord ) * v_Color;" +
" gl_FragColor.rgb *= v_Color.a;" +
"}";
但是连续使用程序渲染的所有对象,我用这个着色器创建的都没有显示......
任何人都可以告诉我问题出在哪里或必须执行哪些步骤来渲染透明纹理?我会非常感激:D
使用不与 alpha 量相乘的着色器(无混合):透明渲染为黑色。
[与图 1 相同,但有混合][2]
解决方案
推荐阅读
- mongodb - mongodb ObjectId 的问题
- ios - 更新 UICollectionViewCells 的动态高度
- javascript - v-for: _vm.property 为空
- javascript - 如何通过nodejs脚本运行命令
- regex - 正则表达式匹配多行换行符
- apache-kafka - Kafka 代理能否以二进制格式以及 Avro、JSON 和字符串格式存储数据?
- apache - 如何修复:Docker 的 Apache httpd 容器意外关闭(SIGTERM)
- reactjs - TypeError: wrapper.exists 不是函数 && TypeError: wrapper.find 不是函数
- python - 如何仅验证扩展名为 .xlsx 的文件名?
- javascript - 无法在 iOS 浏览器和桌面 safari 中使用 javascript 更新 CSS 动画