当前位置: 代码迷 >> java >> Java Android OpenGL ES 2.0-片段着色器Texture2D不起作用
  详细解决方案

Java Android OpenGL ES 2.0-片段着色器Texture2D不起作用

热度:23   发布时间:2023-07-17 20:25:57.0

我有一个问题,如果我尝试渲染带纹理的四边形,屏幕上什么也不会出现。 一个简单的彩色四边形效果很好。 似乎只有我使用“ texture2D”功能,才能正常工作。 但是,如果我编译着色器或链接程序,则不会收到任何错误消息。

这项工作(屏幕上出现一个红色方形框):

uniform sampler2D un_TextureUnit;

varying vec2 fr_UV;

void main()
{
    gl_FragColor = vec4(1, 0, 0, 1);
}

这不起作用(屏幕上什么都没有出现):

uniform sampler2D un_TextureUnit;

varying vec2 fr_UV;

void main()
{
    gl_FragColor = texture2D(un_TextureUnit, fr_UV);
}

这不起作用(屏幕上也不显示任何内容):

uniform sampler2D un_TextureUnit;

varying vec2 fr_UV;

void main()
{
    vec4 c = texture2D(un_TextureUnit, vec2(0.5, 0.5));
    gl_FragColor = vec4(1, 0, 0, 1);
}

请注意,我只更改为着色器,而代码中没有任何内容。 仅当我使用“ texture2D”功能时,着色器似乎无法编译,但是没有收到任何错误消息。

我的片段着色器可以很好地在三角形上绘制纹理:

 precision highp float;

 uniform sampler2D u_texture0;
 varying vec2 v_textureCoordinate0;  


 void main()                                  
 {                   
     gl_FragColor = texture2D(u_texture0, v_textureCoordinate0);
 }   

因此,我相信问题不在于片段着色器(类似于我的),而在于编写着色器的代码中。 我建议你检查一下:

  • 如果绑定纹理的代码正确(请检查GLES20.glVertexAttribPointer,GLES20.glEnableVertexAttribArray)
  • 如果有脸剔除

无论如何, 有一个很好的教程,介绍如何绘制带有纹理的三角形。

  相关解决方案