Opengl 使用GLFW渲染带纹理的点精灵
我目前正在渲染一组点,我想使用点精灵对其应用纹理。要加载我的纹理,我使用GLFW。我遵循了OpenGL超级圣经一章中的说明,但是当我尝试在片段着色器中应用纹理时,它不起作用 以下是我在这方面的一些代码片段:Opengl 使用GLFW渲染带纹理的点精灵,opengl,shader,point-sprites,Opengl,Shader,Point Sprites,我目前正在渲染一组点,我想使用点精灵对其应用纹理。要加载我的纹理,我使用GLFW。我遵循了OpenGL超级圣经一章中的说明,但是当我尝试在片段着色器中应用纹理时,它不起作用 以下是我在这方面的一些代码片段: //Variables GLuint starTBO; GLuint location_texture = 0; // Set location (in main function) glUseProgram(shader_program2); location_texture = glG
//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方法中启用了点精灵模式。纹理未应用于点的原因可能是什么
编辑:我插入了一个if语句,以查看对glfwLoadTexture2D的调用是否正常工作,事实上并非如此。什么会导致这一失败?我尝试使用相对路径和真实路径作为参数,但仍然没有改变。我还尝试使用不同的.tga图像。任何人都还不明白为什么它不起作用
编辑2:可能是freeglut和glfw不能一起工作吗?在调用
glUniform1i()
之前,尝试在glActiveTexture(GL\u TEXTURE0+0)
中进行转换。是否在顶点着色器中设置点大小?是的,它已固定为20.0。绘制点精灵(四边形),但纹理不适用直到现在,我完全避免使用纹理。现在我想从一个简单的用例开始,但它不起作用…所以我真的不知道会出什么问题。有没有办法检查我的纹理在这种情况下是否正确加载?使用。中断相关的GL调用(如glGenTextures(…)),然后在监视纹理状态时单步执行。因此,gDEBuffer告诉我:使用的内部像素格式与请求的内部格式不同。这可能是因为请求了图形系统不支持的像素格式。我从示例中复制了不同的.tga文件,这些文件可以正常工作,所以我不明白该死的问题是什么。有时,使用压缩/未压缩的tga文件(取决于您的代码使用的是什么)可以得到这些文件。请确保文件以代码接受的确切格式保存(是的,这似乎是显而易见的,但并非所有TGA生来都是平等的……它们在过去也给了我同样的问题):特别关注图像位深度和尺寸,启用/禁用压缩以适应加载程序,这有望解决您的问题:)