2

現在、ポイント スプライトを使用してテクスチャを適用したい多数のポイントをレンダリングしています。テクスチャをロードするには、GLFW を使用しています。これについて OpenGL Super Bible の章の指示に従いましたが、フラグメント シェーダーでテクスチャを適用しようとしてもうまくいきません。

これに関する私のコードスニペットの一部を次に示します。

//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 が一緒に動作しないのでしょうか?

4

1 に答える 1

1

通話のglActiveTexture(GL_TEXTURE0 + 0)前に a を投げてみてください。glUniform1i()

于 2013-01-30T14:56:04.440 に答える