gpt4 book ai didi

Android Opengl 2.0 Alpha 混合问题 - 半透明纹理

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:01 27 4
gpt4 key购买 nike

我在游戏中使用 Apha Blending 时遇到这个问题,当我绘制一个带有 alpha 纹理的表面时,应该不可见的部分是不可见的,但是应该可见的部分是半透明的。这取决于光量 - 离光源越近看起来越好,但在阴影中这些物体几乎消失了。

我启用 Alpha 混合:

GLES20.glEnable(GLES20.GL_BLEND);

然后我设置函数:

GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);

效果还是一样。我使用带 alpha channel 的 48 位 png 文件。

我的 fragment 着色器看起来像这样:

final String fragmentShader =   
"precision mediump float; \n"
+"uniform vec3 u_LightPos; \n"
+"uniform sampler2D u_Texture; \n"
+"varying vec3 v_Position; \n"
+"varying vec4 v_Color; \n"
+"varying vec3 v_Normal; \n"
+"varying vec2 v_TexCoordinate; \n"
+"void main() \n"
+"{ \n"
+"float distance = length(u_LightPos - v_Position); \n"
+"vec3 lightVector = normalize(u_LightPos - v_Position); \n"
+"float diffuse = max(dot(v_Normal, lightVector), 0.0); \n"
+"diffuse = diffuse * (" + Float.toString((float)Brightness) +" / (1.0 + (0.08 * distance))); \n"
+"diffuse = diffuse; \n"
//+3
+"gl_FragColor = (v_Color * diffuse * texture2D(u_Texture, v_TexCoordinate)); \n"
+"} \n";

和顶点着色器:

uniform mat4 u_MVPMatrix;                  
uniform mat4 u_MVMatrix;
attribute vec4 a_Position;
attribute vec3 a_Normal;
attribute vec2 a_TexCoordinate;
varying vec3 v_Position;
varying vec4 v_Color;
varying vec3 v_Normal;
varying vec2 v_TexCoordinate;
void main()
{
v_Position = vec3(u_MVMatrix * a_Position);
v_Color = a_Color;
v_TexCoordinate = a_TexCoordinate;
v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0));
gl_Position = u_MVPMatrix * a_Position;
}

Thx for any suggestions:)

最佳答案

您的 fragment 着色器将纹理颜色的所有 4 (RGBA) 分量与漫反射因子相乘。这将使您的 alpha 分量在漫射光消失时趋向于零,从而使您的 Sprite 几乎不可见。

要修复您的代码,请将其更改为如下内容:

gl_FragColor = v_Color * texture2D(u_Texture, v_TexCoordinate);
gl_FragColor.rgb *= diffuse;

关于Android Opengl 2.0 Alpha 混合问题 - 半透明纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15417910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com