glDepthTest를 사용하여 코드를 작성했으며 투영 Z 버퍼 값의 공식이 무엇인지 이해하려고합니다./(farZ - nearZ) -
Z 버퍼의 값 = (Z_value farZ)glDepthTest의 사용이 명확하지 않습니다.
#define CUBE_SIDE_SIZE 512.0f
#define Z_SIZE -0.25f
#define WINDOW_WIDTH 1024
#define WINDOW_HEIGHT 768
void init(void)
{
glViewport(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,WINDOW_WIDTH,0,WINDOW_HEIGHT, -1, 1);
}
void display(void)
{
GLfloat readPixel;
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(0.8);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glBegin(GL_QUADS);
glColor3f(1, 0, 0);
glVertex3f(0, 0, Z_SIZE);
glVertex3f(0, CUBE_SIDE_SIZE, Z_SIZE);
glVertex3f(CUBE_SIDE_SIZE, CUBE_SIDE_SIZE, Z_SIZE);
glVertex3f(CUBE_SIDE_SIZE, 0, Z_SIZE);
glEnd();
glDisable(GL_DEPTH_TEST);
glFlush();
glutSwapBuffers();
glReadPixels(0,0,1.0,1.0,GL_DEPTH_COMPONENT, GL_FLOAT, &readPixel);
}
이 경우 readPixel의 값은 0.625이며, 그래서 계산이 생각 :
가이 코드를 실행 제 경우
:
[1 - (-0.25)]/1 - (- 1)] = 0.625
1.25/2 그러나 난이 변화 할 때 1 #DEFINE의 Z_SIZE을 0.25f 2. gl 직교 (0, WINDOW_WIDTH, 0, WINDOW_HEIGHT, 0, 1);
readPixel에서 값 0.8을 얻었지만 깊이 테스트를 잘못 수행 한 것과 같지만 Z 버퍼 값을 계산하면 (1 - 0.25)/(1 - 0) = 0.75와 같아야합니다. 0.8 (명확한 깊이 값).
이 동작을 설명 할 수 있습니까?
나는 w가 오르막이 아닌 절정에서만 사용되었다고 생각했다. – user2877748
@ user2877748 : 항상 사용되지만 정사영 w = 1을 사용합니다. – datenwolf
따라서 ortho를 사용하고 변환이없는 Z 버퍼 값은 선형으로 변경됩니까? 그렇다면 작성된 수식이 OK입니까? 감사합니다 – user2877748