2011-02-01 6 views
3

큐브 매핑을 내 프로젝트에 추가하려고하지만 오류 수정 방법을 알지 못하는 오류가 발생합니다. 이 모든 몇 가지 줄을 주석으로 처리 할 때마다 문제가 없지만 때가되면 ... 오류가 발생합니다. 주요 "org.lwjgl.opengl.OpenGLException : 픽셀의 포장을 풀고 버퍼 개체를 사용할 때 오프셋 (offset)를 사용할 수 없습니다"cubemap in LWJGL

"스레드에서 예외"

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

glTexImage2D에 마지막 인수는 텍스처의 픽셀을 포함하는 버퍼해야하기 때문이다 주셔서 감사합니다. 따라서 LWJGL BufferUtils을 사용하여 20 * 20 버퍼를 할당하고 텍스처 데이터로 채운 다음이 버퍼를 glTexImage2D 함수에 전달해야합니다.

이제 glTexImage2D에 int를 전달하는 이유는 최신 인수로 long을 허용하는 버전이 하나 있기 때문입니다. 그리고 픽셀 데이터를 가져 오기 위해 픽셀 버퍼 객체의 오프셋을 나타내야합니다. 픽셀 버퍼 오브젝트가 첨부되지 않았으므로 (그리고 큐브 맵에 필요하지 않은) LWJGL은 불평합니다. 기본적으로 temp.getTextureID()를 마지막 인수로 지정하면 glTexImage2D의 "잘못된"버전이 호출됩니다.