Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Opengl 使用GLFW渲染带纹理的点精灵_Opengl_Shader_Point Sprites - Fatal编程技术网

Opengl 使用GLFW渲染带纹理的点精灵

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

我目前正在渲染一组点,我想使用点精灵对其应用纹理。要加载我的纹理,我使用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方法中启用了点精灵模式。纹理未应用于点的原因可能是什么

编辑:我插入了一个if语句,以查看对glfwLoadTexture2D的调用是否正常工作,事实上并非如此。什么会导致这一失败?我尝试使用相对路径和真实路径作为参数,但仍然没有改变。我还尝试使用不同的.tga图像。任何人都还不明白为什么它不起作用


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

在调用
glUniform1i()
之前,尝试在
glActiveTexture(GL\u TEXTURE0+0)
中进行转换。

是否在顶点着色器中设置点大小?是的,它已固定为20.0。绘制点精灵(四边形),但纹理不适用直到现在,我完全避免使用纹理。现在我想从一个简单的用例开始,但它不起作用…所以我真的不知道会出什么问题。有没有办法检查我的纹理在这种情况下是否正确加载?使用。中断相关的GL调用(如glGenTextures(…)),然后在监视纹理状态时单步执行。因此,gDEBuffer告诉我:使用的内部像素格式与请求的内部格式不同。这可能是因为请求了图形系统不支持的像素格式。我从示例中复制了不同的.tga文件,这些文件可以正常工作,所以我不明白该死的问题是什么。有时,使用压缩/未压缩的tga文件(取决于您的代码使用的是什么)可以得到这些文件。请确保文件以代码接受的确切格式保存(是的,这似乎是显而易见的,但并非所有TGA生来都是平等的……它们在过去也给了我同样的问题):特别关注图像位深度和尺寸,启用/禁用压缩以适应加载程序,这有望解决您的问题:)