Programming

    삼각형 내부 외부 판별

    삼각형안에 P가 있는지 없는지 판별해보도록 하겠다. 내외적을 통해 확인이 가능하다. ab = a->b 벡터 ac = a->c 벡터 at = a->t 벡터 cross = 외적의 결과 값 타겟이 내부에 있으면 외적의 방향이 같은 방향을 보게되며, 타겟이 외부에 있으면 외적의 결과가 반대로 나오게 된다. 이렇게 나온 외적을 한번 더 내적해야한다. 하나의 기준 벡터에서 대상 벡터가 90도를 넘을때 내적 값이 음수가 나오기 때문이다. 타겟이 외부에 있을때 내적의 결과가 반대로 나오게 된다. 내적을 사용하면 간단하게 내외부 판별이 가능해진다.

    백페이스 컬링(Back Face Culling)

    백페이스 컬링(Back Face Culling / 은면 제거) 백페이스 컬링은 폴리곤은 두 개의 면을 가지고 있으며 하나의 면을 전면, 다른 면을 후면이라 부르고 전면을 향하고 있는 폴리곤들이 뒤쪽의 후면 폴리곤을 가리고 있을때 후면 폴리곤을 그리지 않음으로써 최적화적 이득을 취하는 컬링 기법이다.

    벡터 내적과 외적을 응용한 왼쪽과 오른쪽 판별하기

    이전 포스팅에서 내적을 통한 시야 판별을 하였다. 월드 좌표계의 Up 방향 벡터를 U, 캐릭터의 Forward Vector를 F, 플레이어와 판별 대상간의 벡터를 D벡터라고 가정하면 U · (D *F), 즉 Det(U,D,F) 값이 0보다 크면 오른쪽, 0보다 작으면 왼쪽에 있음을 판별할 수 있다. 외적을 통한 벡터의 방향이 Up벡터 방향과 예각을 이루면 cos 값이 0보다 큰 원리이다.

    내적을 사용한 시야 판별

    플레이어의 시야각(Field of View)을/를 θ라고 하면, Forward Vector와 시야 판별 대상과 플레이어간의 벡터간의 내적을 통해 나오는 각도 값이 θ/2를 넘지 않으면 시야 내 존재한다는 것을 판별 할 수 있다. 이때 θ값의 범위가 -90도 ~ 90도 사이에 있으면 플레이어의 앞쪽에 존재한다는 것이고 반대는 뒤에 있기에 아예 시야에 없다고 판단해도 무방하다. 내적을 활용해 판별할 것이기에 cosθ의 값이 0보다 크면 앞쪽, 0보다 작으면 뒤쪽에 있다로 판단할 수 있다.