2011-05-10 2 views
2

다음 코드는 뒤 따르는 이미지를 생성합니다. 배경에 사용하고있는 이미지는 displayMode와 마찬가지로 640 x 480입니다. 텍스처 은 .bmp이며 Slick 텍스처 로더가로드됩니다. 쿼드를 채우지 못하는 이유와 그것이 왜 반영되는지 혼란 스럽습니다. 편집 : 내 OpenGL 장면의 배경은 핑크색이며, 검은 색은 쿼드에서 생성 된 것입니다. 배경 이미지는 "테스트"가 그려진 2px 연한 파란색 테두리가있는 녹색 블록입니다. GL11.glClearColor(1.0f, 0.75f, 0.796f, 0.0f);enter image description here문제 Ortho2D가있는 OpenGL의 쿼드 매핑 텍스처

내 GL_PROJECTION이 밀어하기 전에 다음 사항을 포함 : 나는 GL11.glTranslatef(20.0f, 20.0f, 0.0f);을 추가 할 때

private void renderBackground(){ 
    float w = displayMode.getHeight()/2; 
    float h = displayMode.getWidth()/2; 

    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glPushMatrix(); 

    GL11.glLoadIdentity(); 
    GLU.gluOrtho2D(-w, w, -h, h); 

    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glPushMatrix(); 

    GL11.glLoadIdentity();  
    GL11.glDisable(GL11.GL_DEPTH_TEST); 

    if(useTextures)background.bind(); 
    GL11.glBegin(GL11.GL_QUADS); 

    GL11.glTexCoord2f(0.0f, 0.0f); 
    GL11.glVertex2f(-w,-h); 

    GL11.glTexCoord2f(1.0f, 0.0f); 
    GL11.glVertex2f(w,-h); 

    GL11.glTexCoord2f(1.0f, 1.0f); 
    GL11.glVertex2f(w, h); 

    GL11.glTexCoord2f(0.0f, 1.0f); 
    GL11.glVertex2f(-w, h); 

    GL11.glEnd(); 

    GL11.glEnable(GL11.GL_DEPTH_TEST); 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glPopMatrix(); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glPopMatrix(); 
} 

OpenGL Texture mismapping

는 이제 핑크 내 "initGL"방법하는 int 만든 색상 인 나타나는지 알 수 있습니다 그것, 내 GL_MODELVIEW renderBackground() 호출 될 때 수정되지 않습니다.

GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix 
    GL11.glLoadIdentity(); // Reset The Projection Matrix 

    // Calculate The Aspect Ratio Of The Window 
    GLU.gluPerspective(45.0f, (float) displayMode.getWidth()/(float) displayMode.getHeight(), 0.1f, 25.0f); 
    //position camera 
    GLU.gluLookAt(5.0f, 3.0f, -5.0f, 0.0f, 0.0f, -10.0f, 0.0f, 1.0f, 0.0f); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The Modelview Matrix 
+0

"너무 잘못 표시되고 있습니다."올바른 디스플레이는 ... 무엇입니까? – genpfault

+0

죄송합니다. 실수입니다. 나는 전체 다각형이 내 텍스처로 채워질 것으로 기대하고있었습니다. – kieve

+0

그것이 가득 찬 것처럼 보입니다. 다각형이 전체 뷰포트를 채우게할까요? 그렇다면'GL_PROJECTION'과'GL_MODELVIEW' 행렬의 내용은 무엇입니까? – genpfault

답변

3

문제를 확인하는 데 추가 정보가 필요하지만 여기에는 몇 가지 가능성이 있습니다.

1) 텍스쳐를로드하기 위해 라이브러리를 사용하고 있기 때문에 2의 텍스처 파워를 지원하지 않는 구형 비디오 카드를 사용하고 있습니다. 아마도 그것을 감지하고 두 개의 이미지의 힘을 생성합니다. 그것을 검은 색으로 채우십시오.

2) 사용자 (또는 사용중인 라이브러리 중 일부)가 텍스처 매트릭스 스택의 매트릭스를 변경했으며 텍스처 좌표를 변경합니다.

3) 텍스처를로드 할 때 (또는 라이브러리를 호출 할 때) 잘못된 동작을하고 있습니다.

먼저 확인해야 할 점은 비디오 카드가 2 개의 확장자가 아닌 텍스처를 지원하는지 여부입니다. 당신은 내가 처음 볼 무엇 how to detect if openGL/card supports non power of 2?

+0

감사의 말씀, 2의 거듭 제곱이 아닌 텍스처는 지원되지 않습니다. – kieve

0

참조 런타임에 확인할 수 있습니다, 당신은

float w = displayMode.getHeight()/2; 
float h = displayMode.getWidth()/2; 

이 전환 계산이다?

둘째, 로더가 그것을 뒤집어서 텍스처를 뒤집을 수 있습니다. (나에게 이런 일이 일어난 것을 기억하고있을 때, 특히 BMP를 사용했을 때).