【问题标题】:OpenGL Texture Shader not WorkingOpenGL纹理着色器不工作
【发布时间】:2015-08-20 22:45:04
【问题描述】:

我正在用 OpenGL 开发一个程序。我当前的设置只包括一个四边形和一个我想在其上渲染的纹理。问题是纹理没有渲染到四边形上。如果我更改片段着色器以呈现它正确呈现的颜色。

这里是渲染代码:

glfwSwapBuffers(window);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glUseProgram(programID);

glBindVertexArray(vaoID);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);
glDrawElements(GL_TRIANGLES, indicies.length, GL_UNSIGNED_INT, 0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindVertexArray(0);

glUseProgram(0);

顶点着色器:

#version 400 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec2 textureCoords;

out vec2 pass_TextureCoords;

void main() {
    gl_Position = vec4(position, 1.0);
    pass_TextureCoords = textureCoords;
}

片段着色器:

#version 400 core

in vec2 pass_textureCoords;

out vec4 out_Color;

uniform sampler2D textureSampler;

void main() {
    out_Color = texture(textureSampler, pass_textureCoords);
}

【问题讨论】:

  • 设置顶点缓冲区的代码在哪里?

标签: java opengl lwjgl


【解决方案1】:

您需要为 textureSampler 指定制服。 即,

glUniform1i(textureSamplerHandle, 0);

你从中检索到的

textureSamplerHandle = glGetUniformLocation(shaderProgram, "textureSampler");

【讨论】:

  • 虽然通常是个好主意,但对于简单的示例来说这不是必需的。 Sampler uniform默认值为0,纹理绑定到纹理单元0,所以默认值是正确的。
  • 我的回答是不正确的,因为我声明当示例使用 TEXTURE0 时应该使用“1”。已更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多