2012-02-17 4 views
3

작동하지 내가 가진 형식을 설정합니다.OpenGL을 깊이 테스트가

다음으로 initializeGL depthTesting을 설정했습니다.

void VoxelEditor::initializeGL() 
{ 
    glClearDepth(2000.0);         // Enables Clearing Of The Depth Buffer 
    glEnable(GL_DEPTH_TEST);       // Enables Depth Testing 
    glDepthFunc(GL_LESS);        // The Type Of Depth Test To Do 
    glShadeModel(GL_SMOOTH);       // Enables Smooth Color Shading 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations 
} 

나는 깊이 버퍼를 지우고 있습니다.

void VoxelEditor::paintGL() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    draw(); 
} 

내가 덜 정점으로 작업하는 데 사용, 그래서 내가 depthbuffer가 처리하기에 너무 많은 사용하고 있음을 수 있습니다 기억 (?). 저는 32 * 32 * 32 개의 복셀을 가지고 있습니다. 복셀은 대부분의 시간의 절반에 해당하므로 98,304 쿼드입니다.

그러나 깊이 테스트는 여전히 작동하지 않으며 실행 순서대로 쿼드를 표시합니다.

+0

glClearDepth()와 glDepthFunc의 조합이 될 수 없습니다. glClearDepth()를 제거하려고하면 어떻게 될까요? – ixM

+0

아니, 작동하지 않습니다. – RobotRock

+0

나는 glDepthRange *를 0에서 1까지 추가하려고 시도했으나 아무 것도 변경하지 않았다 : S – RobotRock

답변

1

그래서 나는 depthbuffer를 처리하기 위해 너무 많은 것을 사용하고있을 수 있습니다.

깊이 버퍼는 정점을 간과하지 않습니다. 그것이 보이는 모든 것은 들어오는 파편이며 얼마나 많은 수의 것이 든 상관 없습니다.

void VoxelEditor::initializeGL() 
{ 
    glClearDepth(2000.0); // Enables Clearing Of The Depth Buffer 

이 줄은 청산을 사용하지 않습니다. 깊이 버퍼가 지워지는 값을 설정합니다. 값은 0 ... 1 범위 내에 있어야합니다. 투명화 깊이는 정규화 된 장치 좌표, 즉 모델 뷰, 투영 및 균등 분할이 적용된 후에 나타납니다. 기본값은 그 수행하지 무슨,

glEnable(GL_DEPTH_TEST); // Enables Depth Testing 
    glDepthFunc(GL_LESS);  // The Type Of Depth Test To Do 
    glShadeModel(GL_SMOOTH) // Enables Smooth Color Shading 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations 

없음 1.

입니다. 원근감은 단순한 선형 변환이며 항상 동일하게 작동합니다. 이것이 의미하는 바는 텍스처 좌표가 다른 방식으로 보간되어 품질이 향상 될 수 있다는 것입니다.
} 

그들은 아무것도를 초기화하지 않기 때문에 항상 도면 기능에 이러한 호출을 두는 것이 좋습니다

. 그들은 그림 그리기 상태를 설정했습니다. OpenGL은 상태 머신이며 상태 머신의 중요한 규칙은 상태를 추적하는 것입니다. 또는을 사용할 때마다이를 알려진 상태로 만들어야합니다.

+0

(분명히 나쁜) 튜토리얼에서 복사 된 몇 줄을 얻었다. glHint 옵션과 glClearDepth는 아직 보지 않았지만, 기본값은 옳기 때문에 후자는 이미 제거되었습니다. 그 결함이 무엇인지 아는 어떤 생각? 이것은 실제로 대답이 아닙니다 .. – RobotRock

+0

@ KajToet : 전체 코드를 보지 않고도 나는 추측 할 수 없습니다.그리고 미안하지만, 그 수정 구슬은 완전히 찢어지는 것 같습니다.) – datenwolf

1

draw()에서 setDepthTest를 설정하여이 문제를 해결했습니다.

glMatrixMode(GL_MODELVIEW); 
glEnable(GL_DEPTH_TEST); 
+0

이것은 제가 여러분에게 제안한 것과 정확히 일치합니다. 내 대답의 마지막 단락을보십시오. – datenwolf