2014-01-19 5 views
0

기본 Java 함수로 개발을 시작한 플랫폼 작성자를 만들고 있지만 이제는 OpenGL로 모든 것을 전환하고 있습니다. 저는 항상 OpenGL을 사용하는 것처럼 모든 것을했습니다. 다른 OpenGL 프로젝트에서도 잘 작동했습니다. 이제 내 문제는 LWJGL/OpenGL이 아주 이상한 방식으로 텍스처를 스케일링한다는 것입니다.이상하게도 LWJGL/OpenGL 크기 조정 텍스처

enter image description here

내 화면의 가로 세로 비율과 관련이있을 것으로 보인다. (8 : 5)

나는 이미 올바른 방법으로 화면을 뒤집어 썼다. 그러나 텍스트가 잘 보이고있는 것처럼, 그것은 질감이있는 rect이고, 바닥. Metamorph.java (기본 클래스)

public static void initGL() 
    { 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glOrtho(0, Display.getWidth(), 0, Display.getHeight(), 1, -1); 
      glEnable(GL_BLEND); 
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
      glMatrixMode(GL_MODELVIEW); 
      glClearColor(0, 0, 0, 1); 
      glDisable(GL_DEPTH_TEST); 
    } 

    public void render() 
    { 
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

      glLoadIdentity(); 
      glScalef(1.0f, -1.0f, 1.0f); 
      glTranslatef(0f, -720f, 0f); 
      //glScalef(1280f/800, 720f/500, 1f); 

      renderer.render(); 

      Display.update(); 
      Display.sync(60); 
    } 

Renderer.java (렌더링 물건)

private void renderMainMenuWithGL() 
    { 
      //System.out.println("Main Menu!"); 

      glColor4f(1, 1, 1, 1); 

      try 
      { 
        Texture bg = loadTexture("mockery"); 
        bg.bind(); 
      } catch (Exception e) 
      { 
        e.printStackTrace(); 
      } 

      //drawQuad(0, 0, 1280, 720, 0, 0, 1280, 720); 
      glPushMatrix(); 
      { 
        glBegin(GL_QUADS); 
        glTexCoord2f(0, 0);glVertex2f(0, 0); 
        glTexCoord2f(0, 1);glVertex2f(0, 720); 
        glTexCoord2f(1, 1);glVertex2f(1280, 720); 
        glTexCoord2f(1, 0);glVertex2f(1280, 0); 
        glEnd(); 
      } 
      glPopMatrix(); 

      TrueTypeFont f = loadFont(MAINFONT, Font.PLAIN, 50); 
      TrueTypeFont fb = loadFont(MAINFONT, Font.PLAIN, 48); 

      int sel = -1; 
      if(Mouse.getX() > 1000 && Mouse.getX() < 1240 && Mouse.getY() > 282.5F && Mouse.getY()< 737.5F) 
        sel = Math.round((Mouse.getY() - 337.5F)/75F); 

      if(sel == 0) 
        drawStringRight(fb, 1240, 350, "Story", new Color(0xff516b6b)); 
      else 
        drawStringRight(f, 1240, 350, "Story", new Color(0xff516b6b)); 
    } 

    private void drawStringRight(TrueTypeFont f, int x, int y, String s, Color c) 
    { 
      glPushMatrix(); 
      f.drawString(x-f.getWidth(s), y, s, c); 
      glPopMatrix(); 
    } 

내가 : 여기

실제로 OpenGL을 사용 두 클래스에서 가장 중요한 조각이다 또한 파일 구조에 대한 조언을 듣고 다른 곳에서 내가 잘못한 부분을 열어 보았지만 마음에 들었다. WIP

+0

-1 : 붙여 넣기가 죽으면 SO가 영원합니다. 코드를 질문으로 편집하십시오. – genpfault

+0

위 게시물에 가장 작은 관련 스 니펫을 게시하십시오. 외부 연결은 끊고 당신을 돕는 것을 시도해 사람들을 위해 일이다. – user1118321

+0

@genpfault 가장 중요한 스 니펫을 게시물로 편집했습니다. 아이디어가 있습니까? – juliand665

답변

0

내가 게시 한 것으로 볼 수있는 유일한 문제는 렌더링 이전에 수행 한 비율 조정 및 변환입니다. 당신은 당신의 프로젝션 매트릭스 셋업으로 이것을 할 필요가 없습니다. 다른 가능성은 여러분이 생각한 것처럼 크기가 실제로 1280x720이 아니거나 게시하지 않은 코드에서 행렬 중 하나를 더 수정 한 것입니다. 내가 모체 행렬에 modelview와 투영 행렬을 설정 한 다음 쿼드를 그리기 전에 immediatly 위에 glOrtho를 사용하고 1280/720 대신에 Display.getWidthDisplay.getHeight을 버텍스 좌표로 사용합니다.

이 나를 위해 잘 작동 :

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, Display.getWidth(), 0, Display.getHeight(), 1, -1); 
glBegin(GL_QUADS); 
glTexCoord2f(0,0); 
glVertex2i(0, 0); 
glTexCoord2f(1,0); 
glVertex2i(Display.getWidth(), 0); 
glTexCoord2f(1,1); 
glVertex2i(Display.getWidth(), Display.getHeight()); 
glTexCoord2f(0,1); 
glVertex2i(0, Display.getHeight()); 
glEnd(); 

이 아직도 나던 작업하는 경우, 뷰포트도 전체 화면으로 설정되어 있는지 확인하십시오 : glViewport(0,0,Display.getWidth(),Display.getHeight()).

마찬가지로 드로잉 전후에 glPushMatrix()glPopMatrix을 사용하고 있으며 이는 아무 것도 필요하지 않으므로 필요하지 않습니다. 푸시 및 팝은 현재 투영 또는 모델 뷰 행렬을 저장 한 다음 나중에 다시로드하기 위해 사용되므로 필요에 따라 변환을 적용하고 실행 취소 할 수 있습니다.

0

다음과 같은 윈도우 모서리의 좌표는 (0,0)에서 (1680, 1050)까지이며 1280x800 픽셀을 포함하는 영역으로 매핑됩니다. 그런 다음 1280x720 이미지를 그려 넣으므로 이미지의 화면 좌표가 800x500 픽셀로 확장됩니다. glOrtho() 전화에서 1280x720을 사용하는 경우 문제가 해결 될 것이라고 생각합니다. 즉, 해당 호출의 디스플레이 크기가 아닌 창의 크기를 원하게됩니다.

+0

'Display.getWidth()'와'Display.getHeight()'은 lwjgl 디스플레이의 너비와 높이를 반환하며, 전체 화면을 반환하지는 않습니다. – Alex

관련 문제