Ray Tracing - Draw Triangle
카테고리: Graphics
태그: DirectX
홍정모님의 그래픽스 새싹코스 강의를 듣고 정리한 내용입니다.
🐥 Draw Triangle
3D 그래픽스에서 복잡한 물체는 삼각형으로 이루어진 폴리곤 메시 형태로 렌더링한다. 따라서 삼각형을 그리는 것이 렌더링의 가장 기본이라고 할 수 있는데, 픽셀에서 나간 Ray가 삼각형과 충돌하는지 여부를 어떻게 판단할 수 있을까? 복잡해 보이는 3차원 구 형태는 방정식으로 쉽게 판별할 수 있었는데 훨씬 간단한 삼각형은 단일 방적식으로 표현이 안되니 살짝 아이러니한 느낌을 받았다.
Step 1 - Find Line-Plane Intersection
- 먼저 삼각형을 포함하는 평면의 normal vector를 구한다.
- normal을 이용하여 위 방정식을 풀면 t(거리)값을 구할 수 있다.
- t를 통해 p를 계산
Step 2 - Determine inside or outside a triangle
Inside | Outside |
---|---|
- 삼각형 내부에 있는 경우 sub triangle(?)의 normal들이 모두 평면의 normal과 같은 방향
- 삼각형 외부에 있는 경우 어느 하나의 normal이 평면의 normal과 반대 방향
- 주의) DirectX는 왼손 좌표계
// 삼각형의 뒷면은 렌더링x (물체가 폴리곤일 경우 사용)
if (dot(-dir, faceNormal) < 0.0f) return false;
// Ray와 평면이 수평에 매우 가깝다면 충돌하지 않는 것으로 판단
if (glm::abs(dot(dir, faceNormal)) < 1e-2f) return false;
// 삼각형이 Ray의 출발점 뒤에 존재한다면 렌더링x
if (t < 0.0f) return false;
🐥 Result
댓글 남기기