2014-06-15 3 views
1

3D 장면의 맨 위에 응용 프로그램의 fps를 표시하는 hud를 그려야합니다. 이 질문에 대한 대답은 초기화 코드를 변경하고 다시 전환하는 것과 관련이 있다는 것을 알고 있습니다. 이 물건 :lwjgl/opengl에서 3d 장면에 2D 오버레이 그리기

GL11.glEnable(GL11.GL_BLEND); 
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, 800, 600, 0, 1, -1); 
glMatrixMode(GL_MODELVIEW); 

이것은 화면의 2d 부분을 렌더링하는 데 필요한 코드입니다. 관련 메모에서 나는이 코드가 무엇을하는지 이해하는데 어려움을 겪고 있으며 그것에 대한 좋은 자료를 찾지 못했습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니다. 대부분의 자습서에는 설치 코드가 포함되어 있지 않으므로 사람들이 사용 방법을 알고 있다고 생각합니다 (하지만 그렇지 않습니다!).

+0

'glOrtho' 콜에 대해 설명하겠습니다. 이것이 투영 행렬입니다. 기본적으로 뷰가 뷰포트에 투영되는 방법을 정의합니다. 직교 투영 행렬은 원근법이없는 투영 행렬입니다. 투영 된 점의 X 및 Y 위치는 그들이 멀리/가까이 갈수록 커지지 않습니다. 0,600이 왼쪽 하단이고 800,0이 오른쪽 상단 인 곳에 투영법을 정의했습니다. 또한 ** 1 **이 가장 가까운 지점이고 ** - 1 **이 가장 멀리있는 (즉 관습에서 거꾸로 있지만 깊이 테스트를 사용하지 않는 경우에는 거의 중요하지 않은) Z 값의 범위를 정의했습니다. . –

+0

당신이 이해해야 할 나머지 부분은 내가 대답 할 때 편안함을 느낄 때보 다 조금 더 복잡하고 시간이 많이 걸립니다. 대답은 글꼴 등을로드하는 방법을 알려주는 것입니다. 매우 복잡한 과정이며 가장 좋은 방법은 튜토리얼을 찾는 것입니다. 실제로 텍스트 렌더링을 구현하는 데 문제가 있다면 좋은 방법이 될 것입니다. StackOverflow에 다른 질문을 할 시간. 바로이 질문은 불행히도 대답하기에는 너무 광범위합니다. - \ –

답변

0

나는이 방법을 사용하고 있습니다 :

public static void make3D() { 

    glPopAttrib(); 
    glPushAttrib(GL_ENABLE_BIT); 

    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 

    glViewport(0,0,SCREEN_WIDTH,SCREEN_HEIGHT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 

    // FOV = Field of View 
    // Aspect ration 
    // zNear and zFar (Viewing range) 
    gluPerspective(FOV,(float) SCREEN_WIDTH/SCREEN_HEIGHT,0.1f,1000f); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

} 
3D 뷰에 변경을 위해

public static void make2D() { 

    glPopAttrib(); 
    glPushAttrib(GL_ENABLE_BIT); 

    glViewport(0,0,SCREEN_WIDTH,SCREEN_HEIGHT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT,0,-1,1); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

} 

2D보기로 변경.

자바가 이걸로 어떤 문제가있는 것 같아, 만약 내가 틀렸다면 나를 바로 잡아주세요!