【问题标题】:Render textured point sprites using GLFW使用 GLFW 渲染带纹理的点精灵
【发布时间】:2013-01-14 09:09:24
【问题描述】:

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

这是我的一些代码sn-ps:

//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 不能一起工作吗?

【问题讨论】:

  • 你在顶点着色器中设置点大小吗?
  • 是的,它已固定为 20.0。点精灵(四边形)已绘制,但未应用纹理

标签: opengl shader point-sprites


【解决方案1】:

尝试在您的glUniform1i() 呼叫之前加入glActiveTexture(GL_TEXTURE0 + 0)

【讨论】:

  • 直到现在,我完全避免使用纹理。现在我想从它们的简单用例开始,但它不起作用......所以我真的不知道可能出了什么问题。
  • 在这种情况下,有没有办法检查我的纹理是否正确加载?
  • 使用gDEBugger。中断相关的 GL 调用(如 glGenTextures(...)),然后在监视纹理状态的同时进行步骤。
  • 所以,gDEBuffer 告诉我:使用的内部像素格式与请求的内部格式不同。这可能是由于请求图形系统不支持的像素格式引起的。我从可以正常工作的示例中复制了不同的 .tga 文件,所以我不明白该死的问题是什么
  • 您有时可以使用压缩/未压缩的 tga 文件(取决于您使用的代码)确保文件以代码接受的确切格式保存(是的,这看起来很明显,但是并非所有的 TGA 生来都是平等的……而且它们在过去给了我同样的问题):特别注意图像位深度和尺寸,启用/禁用压缩以适合加载程序,这有望解决您的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
相关资源
最近更新 更多