2014-11-05 8 views
0

Eclipse에서 텍스처를 그리는 데 문제가 있습니다.텍스처가 osx에서 사라집니다. GL_TEXTURE_2D JOGL Eclipse java

Java 응용 프로그램을 실행할 때 창 팝업에서 몇 밀리 초짜리 텍스처 만 보았을 때 모든 것이 검은 색으로 변합니다.

나는이 코드를 가지고 있으며 내 모든 동급생 PC에서 완벽하게 작동하지만 내 Macbook Pro 2012에서는 작동하지 않습니다. JRE 1.8을 실행하십시오.

jogl 라이브러리를 mac osx 용으로 변경했으며 디버깅 할 때 오류가 표시되지 않습니다. 내가 볼 수있는 것은 무언가 drawQuad 함수에 잘못이있다. gl.glEnable (GL.GL_TEXTURE_2D) 행을 지우면 모든 것이 그려 지지만 텍스처가 없으면 그냥 흰색이된다.

아무도 문제가 무엇인지 알 수 있습니까? 아니면 GL_TEXTURE_2D와 osx에 알려진 버그가 있습니까? 필자가 쓴대로이 응용 프로그램은 다른 PC에서도 잘 작동합니다.

private Texture texture; 

void loadResources() throws GLException, IOException { 
    if (texture == null) 
     texture = TextureIO.newTexture(new File("3.png"), false); 
} 

void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { 
    GL2 gl = drawable.getGL().getGL2(); 
    GLU glu = new GLU(); 

    gl.glMatrixMode(GL_PROJECTION); 
    gl.glLoadIdentity(); // reset 
    glu.gluOrtho2D (0.0, w, h, 0); // define drawing area 

    gl.glMatrixMode(GL_MODELVIEW); 
    gl.glLoadIdentity(); // reset 

} u는 더 많은 코드를 필요로하는 경우

void drawQuad(GLAutoDrawable drawable, float x, float y, float w, float h) { 
    GL2 gl = drawable.getGL().getGL2(); 

    gl.glEnable(GL.GL_TEXTURE_2D); 
    gl.glBindTexture(GL.GL_TEXTURE0, texture.getTarget()); 
    gl.glBegin(GL2.GL_QUADS); 
    gl.glColor3f(1, 1, 1); 
    gl.glTexCoord2f(1, 1); 
    gl.glVertex2f(x,  y); 
    gl.glTexCoord2f(1, 1); 
    gl.glVertex2f(x + w, y); 
    gl.glTexCoord2f(1, 0); 
    gl.glVertex2f(x + w, y + h); 
    gl.glTexCoord2f(0, 0); 
    gl.glVertex2f(x,  y + h); 

    gl.glEnd(); 

} 

public void clearScreen(GLAutoDrawable drawable) { 
    GL2 gl = drawable.getGL().getGL2(); 
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 
} 

그냥 메시지를 남겨 :

는 여기에 내가 어디에 문제가 생각하는 클래스입니다.

+0

GLU glu = new GLU()가 아닌 GLU.createGLU (GL)를 사용하십시오. "새로운 GLU()"는 특정 경우에만 사용되어야합니다. 예를 들어 GLUgl2와 같이 하위 클래스에서만 구현되는 기능이 필요하지 않은 경우입니다. – gouessej

+0

버텍스 배열이나 버텍스 버퍼 객체를 사용해야합니다. 몇 가지 예가 필요한지 여부를 알려주십시오. – gouessej

+0

정말 좋을 몇 가지 예를 쓰고 싶다면. 그래서 openGL 올바른 방법을 배우고 싶습니다 :) – alengqvist

답변

0

here에 따르면 glBindTexture는 glBegin과 glEnd 사이에 허용되지 않습니다. OpenGL 오류를 확인 했습니까? 이것은 GL_INVALID_OPERATION을 생성해야합니다.

편집 : 여기에 따르면 glBindTexture (target)의 첫 번째 매개 변수는 GL.GL_TEXTURE0 일 수 없습니다. GL_INVALID_ENUM 오류가 발생 했어야합니다.

+0

위 행의 다른 위치를 시도했다고 깜빡했다. 그래서 glBindTexture를 시작과 끝 부분에 넣더라도 같은 문제가 발생합니다. – alengqvist

+0

다음 오류 수정을 참조하십시오. OpenGL 오류가 있는지 확인하십시오 !! – BDL

+0

Btw : gl.glTexCoord2f (1, 1);을 (를) 사용하고 있습니다. 두 정점. 이렇게하면 텍스처가 왜곡 될 수 있지만, 직면 한 문제는 아닐 가능성이 큽니다. – BDL