3D Picking

Painter’s Algorithm

  • 각 object마다 고유 색깔을 지정
  • offline buffer (screen에 노출되지 않는 버퍼)를 기본 framebuffer size만큼 사용
  • Two pass 사용
    1. picking pass (1st pass)
      • offline color 버퍼에 고유 color 정보를 저장
    2. rendering (2nd pass)
      • 실제 object를 렌더링해 스크린에 노출
    3. clicked
      • viewport 내에서 click되면, 여떤 color의 object인지 찾음
      • 찾은 object를 pick함
  • 빠른 picking 알고리즘
  • scene이 2번에 걸쳐 rendering 되기 때문에 real-time 앱에는 부적합
  • 비용과 효율을 생각하면 AABB가 오히려 더 나음
    • 다수 primitive가 object 단위로 압축된 표본을 이용 가능
    • 그러나 object가 아닌 volume을 감지하는 측면에서는 Painter’s algorithm이 더 정확함

Ray Casting Algorithm

  • 마우스 포인팅 viewport로부터 역 연산을 통해 world object를 감지해내는 아이디어
    • Ray direction을 먼저 구함
    • 스크린 좌표계에서 마우스 포인터의 점을 transforming
    • viewpoint, perspective matrix의 역행렬을 곱한 뒤 normalise

Möller–Trumbore intersection algorithm

  • Ray와 Triangle의 intersection 여부를 알아내는 방법
  • Ray와 intersect하는 triangle/plane의 precomputation 과정이 필요하지 않다
  • 근데 무슨 원리인지 모르겠다…

출처