OpenGL Picking




pick1.cpp (selection mode)
     -display 함수에서는 정상적으로 객체를 그린다.
     -mouse 함수에서 마우스의 위치값(x,y)를 가지고
          -glSelectBuffer로 네임스택 버퍼를 지정한다.
          -glRenderMode를 GL_SELECT로 지정하여 선택모드로 전환한다.
          -glInitNames으로 네임스택을 초기화한다.
          -gluPickMatrix를 사용하여 뷰볼륨을 지정한 후
          -glPushName/glPopName 또는 glLoadName을 사용하여 네임스택이름을 지정하여
           객체를 그리면, picking 연산이 가능해진다.
          -glRenderMode를 GL_RENDER로 바꾸면, hit record가 네임스택 버퍼에 저장된다.
          -네임스택 버퍼를 처리(processHits) 하여, 해당 객체 ID를 넘겨주어 Pick한다.
          http://www.lighthouse3d.com/opengl/picking/index.php?openglway3

pick2.cpp (bounding box)
     -display 함수에서는 정상적으로 객체를 그린다.
     -mouse 함수에서 마우스의 위치값(x,y)를 가지고
          -각 객체의 bounding box를 안에 들어왔는지 확인하여,
           해당 객체 ID를 넘겨주어 Pick한다.

pick3.cpp (back buffer)
    -display 함수에서는 정상적으로 객체를 그린다.
    -mouse 함수에서 마우스의 위치값(x,y)를 가지고
          -GL_DITHER 를 비활성화한후, 각 객체마다 color code된 그림을 그린다.
          -glReadPixel 로 마우스 위치의 pixel 색을 받아와서 해당 객체의 color와 비교하여,
           해당 객체 ID를 넘겨주어 Pick한다..

Leave a Reply

Your email address will not be published. Required fields are marked *