有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Android OpenGL ES 2.0片段着色器texture2D不工作

我有一个问题,如果我试图渲染纹理四边形,屏幕上不会显示任何内容。 一个简单的彩色四边形效果很好。 似乎只有当我使用“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”函数时,着色器似乎无法编译,但我不会收到任何错误消息


共 (1) 个答案

  1. # 1 楼答案

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

     precision highp float;
    
     uniform sampler2D u_texture0;
     varying vec2 v_textureCoordinate0;  
    
    
     void main()                                  
     {                   
         gl_FragColor = texture2D(u_texture0, v_textureCoordinate0);
     }   
    

    所以,我相信问题不在于片段着色器(与我的类似),而在于准备着色器的代码。我建议你检查一下:

    • 如果绑定纹理的代码正确(请检查GLES20.glvertexattributepointer、GLES20.glenableVertexattributeArray)
    • 如果有人脸剔除

    无论如何,here有一个很好的教程,教你如何用纹理绘制三角形