본문 바로가기

DX

깊이 버퍼

깊이 버퍼

깊이 버퍼(Depth Buffer)란?
화면의 각 픽셀에 대해 ‘가장 가까운 물체’만 보이도록 해주는 메모리입니다.

 

정투영 기준의 간단한 깊이 버퍼 실습

 

정투영에서는 Barycentric 좌표를 이용해 보간 값 alpha[i] 로 삼각형의 꼭짓점의 3개의 z 값으로부터 픽셀 [i][j] 의 깊이 버퍼 값 depth 를 구한 후 depth 의 값이 더 작을 수록 해당 color 값으로 변경한다.

 

깊이 버퍼는 1.0 으로 설정하는 것이 보편적이다.

if (alpha0 >= 0.0f && alpha1 >= 0.0f && alpha2 >= 0.0f) {
    const float area = alpha0 + alpha1 + alpha2;
    const vec3 color =
        (alpha0 * c0 + alpha1 * c1 + alpha2 * c2) / area;

    const float depth = (alpha0 * this->vertexBuffer[i0].z +
                         alpha1 * this->vertexBuffer[i1].z +
                         alpha2 * this->vertexBuffer[i2].z) /
                        area;

    // depth 확인 후 픽셀 값 변경
    if (depth < depthBuffer[i + width * j]) {
        depthBuffer[i + width * j] = depth;
        pixels[i + width * j] = vec4(color, 1.0f);
    }
}

 

 

결과 예시

 

 

 

'DX' 카테고리의 다른 글

뒷면 제거  (0) 2025.04.30
쉐이더 개념  (0) 2025.04.30
그림자 표현  (0) 2025.03.31
원근 투영을 이용한 물체 표현  (0) 2025.03.31
Ray-Tracing  (0) 2025.03.17