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한다..