본문 바로가기
그래픽스ㆍDirectX

[DirectX] 3차원 구 그리기(구, 직선 충돌)

by imagineer_jinny 2023. 8. 29.

본 내용은 <그래픽스 새싹코스  - 홍정모> 강의를 토대로 작성하였습니다. honglab에서 강의를 구매하실 수 있습니다.

 

 

원리

 

1. 모니터 픽셀을 시작으로 모니터와 수직인 방향으로 가상 공간을 향해 광선을 쏴준다.

2. 광선에 부딪힌 물체로부터 색을 가져온다.

 

여기서 z 방향은

const auto rayDir = vec3(0.0f, 0.0f, 1.0f);

 

색을 가져오기 위해서는 먼저 광선이 물체에 닿았는지 안 닿았는지 먼저 판단이 필요

const Hit hit = sphere->IntersectRayCollision(ray);
// 광선이 물체에 닿으면 그 물체의 색 반환
vec3 traceRay(Ray &ray)
{
    const Hit hit = sphere->IntersectRayCollision(ray);

    if (hit.d < 0.0f)
    {
        return vec3(0.0f);
    }
    else
    {
        return sphere->color * hit.d; // 깊이를 곱해서 입체감 만들기
    }
}

* d = 광선의 시작부터 충돌 지점까지의 거리

* hit.d<0.0f = 광선의 시작점으로부터 충돌지점까지 거리가 음수라면 충돌을 하지 않았음

 

 

 

 

 

참고 자료

Line–sphere intersection - Wikipedia

댓글