首页 > 解决方案 > 如何在 OpenGL ES 2.0 中渲染透明纹理

问题描述

大约两天以来,我感到失望:

对于我当前的项目,我导致使用带有透明部分的纹理(png),而渲染它的结果不是预期的,而是黑色像素,在那里它们应该是透明的......

与混合:预期纹理的其余部分与蓝色透明颜色混合

经过研究,我得出结论,可能存在三个问题:

  1. (我认为最有可能):它的原因是我的着色器(可能是因为它不会乘以 alpha 值)
  2. :它的混合模式(我用这个 GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);:)
  3. :它是我加载纹理的方式(我从我的主要信息源复制粘贴它)

主要信息来源: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]

使用 shwon 着色器,无论我打开混合 - 没有结果

标签: androidopengl-estransparenttexture2dalpha-transparency

解决方案


推荐阅读