0

OpenGL バインディングに LWJGL を使用しており、テクスチャでクワッドを描画しようとしています。私はこれを成功させましたが、奇妙な副作用があり、なぜそれが現れているのかわかりません.

次のコードは、テクスチャを最初にロードするとき (最初のレンダリングの前) に実行されます。textureIDテクスチャをバインドする/クワッドを描画するときに、 forの値を保存します。次のセットアップ コードは、ここにある SO の回答から取得したものです。

int textureID = GL11.glGenTextures(); // Generate texture ID

GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID); // Bind texture ID

// Setup wrap mode
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP);

// Setup texture scaling filtering
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);

// Send texel data to OpenGL
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, image.getWidth(), image.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);

レンダリング ループでは、次のコードを使用してクワッドを描画します。

int texture = TextureLoader.loadTexture(TextureLoader.loadImage("/pc_run/run3.png"));

GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);

GL11.glBegin(GL11.GL_QUADS);
{
    GL11.glTexCoord2f(0.0f, 0.0f);
    GL11.glVertex2f(-hw, -hh);

    GL11.glTexCoord2f(1.0f, 0.0f);
    GL11.glVertex2f(+hw, -hh);

    GL11.glTexCoord2f(1.0f, 1.0f);
    GL11.glVertex2f(+hw, +hh);

    GL11.glTexCoord2f(0.0f, 1.0f);
    GL11.glVertex2f(-hw, +hh);
}
GL11.glEnd();

これまでのところ、これは機能します (また、glPushMatrix()/glPopMatrix()呼び出しの間にラップされます)。ただし、これまで GLContext に描画したものは表示されません。初期化コードでへの呼び出しを削除すると GL11.glTexImage2D、スプライトは表示されませんが、他のすべて (非テクスチャ) は正しく表示されます。

4

1 に答える 1