繁体   English   中英

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

[英]Java Android OpenGL ES 2.0 - fragment shader texture2D does not work

我有一个问题,如果我尝试渲染带纹理的四边形,屏幕上什么也不会出现。 一个简单的彩色四边形效果很好。 似乎只有我使用“ 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)
  • 如果有脸剔除

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM