Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';我的GLSL/OpenGL代码没有发现问题_C_Opengl_Glsl_Texture Mapping - Fatal编程技术网

Can';我的GLSL/OpenGL代码没有发现问题

Can';我的GLSL/OpenGL代码没有发现问题,c,opengl,glsl,texture-mapping,C,Opengl,Glsl,Texture Mapping,我编写了一个小程序,在一个简单的四边形中显示32位浮点纹理。显示四边形时,纹理颜色始终为黑色。我做了很多实验,但都没能成功。我真不知道这有什么问题 创建OpenGL纹理的代码如下所示 glEnable(GL_TEXTURE_2D); glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height,

我编写了一个小程序,在一个简单的四边形中显示32位浮点纹理。显示四边形时,纹理颜色始终为黑色。我做了很多实验,但都没能成功。我真不知道这有什么问题

创建OpenGL纹理的代码如下所示

glEnable(GL_TEXTURE_2D);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, textureData);
使用调试器,这些调用中没有任何错误。我还检查了textureData指针,得到了预期的结果(在我的简化程序中,它只是一个渐变纹理)

这是GLSL中的顶点着色器代码:

#version 400
in vec4 vertexPosition;
out vec2 uv;
void main() {
    gl_Position = vertexPosition;
    uv.x = (vertexPosition.x + 1.0) / 2;
    uv.y = (vertexPosition.y + 1.0) / 2;
}
这是一种简单的UV坐标生成,不需要将它们作为顶点属性。对应的顶点缓冲区对象非常简单:

GLfloat vertices[4][4] = {
    { -1.0, 1.0, 0.0, 1.0 },
    { -1.0, -1.0, 0.0, 1.0 },
    { 1.0, 1.0, 0.0, 1.0 },
    { 1.0, -1.0, 0.0, 1.0 },
};
我已经测试了这个解决方案,它显示了我想要的覆盖整个窗口的四边形。在片段着色器中显示UV坐标会重现我期望得到的渐变。现在是片段着色器:

#version 400
uniform sampler2D myTex;
in vec2 uv;
out vec4 fragColor;

void main() {
   fragColor = texture(myTex, uv);
   // fragColor += vec4(uv.x, uv.y, 0, 1);
}
注释掉的行将UV坐标显示为颜色,以便于调试。我做错了什么?我就是不明白为什么在纹理看起来完全正确,uv坐标也正确的情况下,texture()调用返回0。如果我有其他错误,我会在这里链接完整代码:

编辑:这是我如何设置myTex采样器的:

glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
glUniform1i(glGetUniformLocation(shaderProgram, "myTex"), 0);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

编辑:清除顶点着色器代码。

我发现问题:我没有在纹理上设置任何MAG或MIN过滤器。将MIN filter设置为GL\u NEAREST解决了这个问题。

顶点着色器GLSL code中的wild
\
是怎么回事?@UniCell如果它是行的最后一个字符,那么它是有效的(如在C中转义换行)@ratchetfreak,但它看起来有点奇怪:这是一个复制粘贴错误:原始代码在C字符串中,换行符是“\n'-s”。我只是忘了彻底打扫。