2

我目前正在渲染一堆我想使用点精灵应用纹理的点。要加载我的纹理,我正在使用 GLFW。我按照 OpenGL 超级圣经章节中的说明进行操作,但是当我尝试在片段着色器中应用纹理时,它不起作用。

这是我的一些代码片段:

//Variables
GLuint starTBO;
GLuint location_texture = 0;

// Set location (in main function)
glUseProgram(shader_program2);
location_texture = glGetUniformLocation(shader_program2, "sprite_texture");
glUseProgram(0);

// Set Texture (in main function)
glGenTextures(1, &starTBO);
glBindTexture(GL_TEXTURE_2D, starTBO);
if(glfwLoadTexture2D("stone.tga", GLFW_BUILD_MIPMAPS_BIT))
{
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
glEnable(GL_TEXTURE_2D);

// in display method
glUseProgram(shader_program2);
glActiveTexture(GL_TEXTURE0 + 0);
glUniform1i(location_texture, 0);
...

// Fragment shader
const GLchar *fragment_shader2 =
"#version 330\n"
"out vec4 out_color;"
""
"uniform sampler2D sprite_texture;"
""
"void main()"
"{" 
"   out_color = texture(sprite_texture, gl_PointCoord) + vec4(1.0, 0.0, 0.0, 1.0);"
"}"

在我的 initGL 方法中启用了 Point Sprite 模式。纹理不适用于点的原因可能是什么?

编辑:我插入了一个 if 语句来查看对 glfwLoadTexture2D 的调用是否正常工作,实际上不是。什么可能导致这失败?我尝试使用相对路径和真实路径作为参数,但仍然没有变化。我也尝试使用不同的 .tga 图片。任何人,仍然没有弄清楚为什么它不起作用?

编辑2:可能是freeglut和glfw不能一起工作吗?

4

1 回答 1

1

尝试glActiveTexture(GL_TEXTURE0 + 0)在你的glUniform1i()电话之前折腾。

于 2013-01-30T14:56:04.440 回答