3

プロジェクトにキューブ マッピングを追加しようとしましたが、これらの数行をコメントするとすべて正常に動作するのに、修正方法がわからないというエラーが 1 つ表示されますが、それらが...このエラーが発生する

「スレッド「メイン」org.lwjgl.opengl.OpenGLException の例外: Pixel Unpack Buffer Object が無効になっている場合はオフセットを使用できません」

GL11.glDisable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL13.GL_TEXTURE_CUBE_MAP);
    GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);

    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID());
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_X,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID());
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_Y,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID());
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID());
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_Z,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID());
    GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,0,GL11.GL_RGBA,20,20,0,GL11.GL_RGBA,GL11.GL_UNSIGNED_BYTE,temp.getTextureID());

何か間違っていることでも?このエラーを修正するにはどうすればよいですか?

お時間をいただきありがとうございます

4

1 に答える 1

4

これは、glTexImage2D の最後の引数が、テクスチャのピクセルを含むバッファーでなければならないためです。したがって、LWJGL BufferUtilsを使用して 20*20 バッファーを割り当て、テクスチャ データで埋めてから、このバッファーを glTexImage2D 関数に渡す必要があります。

ここで、int を glTexImage2D に渡してもコンパイルされる理由は、最新の引数として long を受け入れるバージョンが 1 つあるためです。また、ピクセル データをフェッチするピクセル バッファ オブジェクト内のオフセットを表すことになっています。ピクセル バッファ オブジェクトがアタッチされていない (キューブ マップには必要ない) ため、LWJGL はエラーを出します。したがって、基本的に、最後の引数として temp.getTextureID() を配置すると、「間違った」バージョンの glTexImage2D が呼び出されます。

于 2011-03-22T10:06:12.103 に答える