2014-02-13 9 views
0

현재 3D 프로젝션 및 렌더링에 대한 첫 경험을하고 있습니다. 그래서, 저는 lov lua (ik, 3D를위한 최상의 platfrom이 아닙니다)를 사용하고 있으며, 모든 폴리곤 (삼각형 만)을 완벽하게 렌더링 할 수 있습니다. 폴리곤 테이블을 카메라와의 거리별로 정렬하는 작업이 가장 많은 시간을 필요로하기 때문에이를 위해 z 버퍼를 구현하고 있습니다. 그러나 나는 이것을 어떻게하는지 잘 모르겠습니다. 나는 원리를 알고 있지만 삼각형의 한 점과 카메라 위치의 거리를 어떻게 알 수 있습니까? 현재의 솔루션은 다음과 같습니다.z 버퍼를 구현하는 좋은 방법

translate edge points of the triangle to 2D points -> 
create polygon of those -> 
for every pixel in the polygon: -> 
translate 2D point back to 3D vertex (somehow) -> 
calculate distance of vertex to camera position -> 
if distance is bigger than zbuffer entry, overwrite zbuffer entry and 
set pixel to polygon color 

소리가 정말 들리 네요. 어떻게 속도를 높일 수 있습니까? 여기있는 사람이 zbuffering을 구현하는 더 좋은 방법이 있습니까?

+0

나는 사랑에 의해 당신이 love2d를 의미한다고 가정하고, 그 태그를 제거 할 수 없다면 – Schollii

답변

1

소프트웨어 Z 버퍼를 구현하려는 경우 다각형을 정렬 할 필요가 없습니다. 알파 블렌딩을 가지고 있으며 Z-Buffer technique에 포함될 수없는 폴리곤 만 정렬 할 수 있습니다.

정점을 카메라 공간 (using view matrix calculations)으로 변환하면 각 정점에 대한 Z 방향 값이 결정됩니다. polygon rasterization은 결국 각 픽셀의 Z 깊이를 제공합니다.

이제 픽셀을 화면에 쓸 때마다 Z 테스트를 할 시간입니다. 픽셀이 현재 픽셀보다 앞에 있으면 쓰고 그렇지 않으면 아무 것도하지 않습니다.

실적 노트 : 당신이 기억 해 은 -bE주의는 "카메라 위치에 정점의 거리".. 어떤 거리 계산을하지 마십시오 말, 매트릭스 Z 버퍼를 사용하는 경우 다각형을 정렬 할 필요가 없습니다 변환은 훨씬 더 효율적으로 필요한 값을 제공합니다.