2012-05-16 7 views
0

내 창에 두 개의 뷰포트를 만들려고합니다. 메인 화면, 전체 화면보기 및 왼쪽 위 모서리의 작은보기. 나는이 문제를 보았고 해결책을 보았다. glScissor()와 glViewport(), 내 깊이 버퍼 비트 지우기, 내 깊이 버퍼 비트 사용 및 한 번만 렌더링 (for 루프 이후)을 사용하고 있습니다. 그러나 분명히, 나는 뭔가를 놓치고있다. 여기 내 코드가있다. 미리 감사드립니다.OpenGL : 여러 겹친 뷰포트 깜박임

편집 : 스크린 샷에 링크 : HTTP : // imgur [도트] co.kr에서/A/sdoUy 는 기본적으로 왼쪽 상단 미니 뷰포트는 사라지고 매우 빠르게 다시 출현, 깜박입니다. 그것은 당신의 깜박 거리는 문제에 도움이 될 것입니다하지만 난 당신이 쓴 나는 경우

void viewports() { 
float width = wWidth; 
float height = wHeight; 

for (int i = 0; i < 2; i++) { 
    glClearColor(.392,.584,.929,0.0f); 

    if (i == 0) { 
     //main view 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glViewport(0,0,(GLsizei)width,(GLsizei)height); 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     gluPerspective(60,(GLfloat)width/(GLfloat)height,1.0,100.0); 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
     keyOp(); 
     camera(); 
    } else if (i == 1) { 
     glScissor(0,height - height/3,(GLsizei)height/3,(GLsizei)height/3); 
     glEnable(GL_SCISSOR_TEST); 
     glClear(GL_DEPTH_BUFFER_BIT); 
     glViewport(0,height - height/3,(GLsizei)height/3,(GLsizei)height/3); 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     gluPerspective(60,1,1.0,100.0); 
     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 
     gluLookAt(0,40,-15,0,-1,-15,1,0,0); 
     glDisable(GL_SCISSOR_TEST); 
    } 
    renderScene(); 
} 
} 
+0

문제가 무엇인지 더 잘 설명해 줄 수 있습니까? – Tim

+0

이중 버퍼링이 활성화되어 있습니까? 컨텍스트를 만들 때 요청하는 내용이어야합니다. – Tim

+0

예, 내 메인() 있음 : glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH); 그리고 glutSwapBuffers()를 호출합니다. 내 renderScene() 함수의 끝에. 도움이된다면 더 많은 코드를 게시 할 수 있습니다. – oots

답변

2

renderscene에서 glutSwapBuffers를 호출하지 마십시오. 렌더러를 프레임 당 두 번 (i == 0 및 i == 1) 호출하므로 기본 화면을 그립니다. 스왑, 미니 맵 그리기, 스왑, 반복.

메인 및 미니 맵을 모두 그려야하고 교체해야합니다.

glClearColor를 여러 번 호출하는 것을 염려하지 마십시오. init에서 한 번만 호출하면됩니다.

+0

아하! 나는 온라인에서 여러 번 답변을 찾았고 이미 해결했다고 생각했지만 실제로 swapBuffers를 두 번 이상 호출했습니다. 내 swapBuffers를 "for"루프 바로 다음으로 이동 시켰습니다. 이제 깜박임이 멈 추면 정말로 호출 할 것입니다. ClearColor를 init() 섹션으로 옮겼습니다. 고맙습니다! 나는 바보 같은 실수에 행복하고 당혹 스럽다. :) – oots

0

확실하지 : 세 번째 매개 변수 대신 내가 당신이 원하는 가정 무엇의 929 인으로

glClearColor(.392,.584,929,0.0f); 

0.929

+0

날카로운 눈 주셔서 감사합니다! 매개 변수를 변경했지만 깜박임에 영향을 미치지 않았습니다. – oots