Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 Z 버퍼 또는 깊이 버퍼 방법

<시간/>

깊이 버퍼 라고도 하는 z 버퍼 숨겨진 표면 감지에 사용되는 방법입니다.

은폐된 표면 감지

투명한 물체와 표면이 있는 모든 그림의 경우. 이 경우 다른 개체 뒤에 있는 개체가 숨겨집니다. 이미지를 제대로 보려면 이러한 숨겨진 표면을 제거해야 합니다. 식별을 숨겨진 표면 문제라고 합니다.

z-buffer에서 z축의 표면을 깊이로 비교합니다.

알고리즘

Step 1: initialize the depth of all pixel max.
   d(i,j) = infinity
Step 2: Initialize color for all pixels.
   c(i,j) = background-color
Step 3: for each pixel in polygon projection do,
   Step 3.1: find z i.e. depth of projection’s (i,j) pixel.
   Step 3.2: if z < d(i,j) do
      Step 3.2.1 : d(i,j) = z and c(i,j) = color of polygon.

이 방법을 사용하여 픽셀 단위로 평면의 각 픽셀의 깊이를 찾습니다. 가장 작은 표면은 버퍼의 색상을 결정합니다. 일반적으로 모든 z 값은 [0,1] 범위에 가깝습니다.

z=0, 후면 클리핑 평면 및 z=1, 전면 클리핑 평면.

z 버퍼의 몇 가지 중요한 점

  • z-buffer 방식을 적용하기 위해 초기 폴리곤(평면) 정렬이 필요하지 않습니다.

  • Z-buffer는 평면의 수가 많아도 빠른 결과를 제공합니다.

  • z-buffer 방식에서는 객체 비교가 필요하지 않습니다.

  • 이 방법을 사용하여 다각형이 아닌 숨겨진 개체도 감지할 수 있습니다.

  • 저장 및 확인을 위한 추가 데이터 구조가 필요하지 않습니다.

  • 하드웨어 구현은 프로세스 속도를 높이는 것이 가능하며 그래픽 워크스테이션을 해결하는 데 적극적으로 사용됩니다.

  • 이 방법은 고려 중인 개체가 불투명한 경우에만 적용할 수 있습니다. 즉, 투명한 개체가 오류를 줄 수 있습니다.

  • 숨겨진 표면을 그리는 것은 시간이 많이 걸리는 과정일 수 있습니다.