opengl picking 예제

선택 또는 선택 코드를 디버깅하는 좋은 방법은 glRenderMode(GL_SELECT)를 호출하지 않는 것입니다. 코드에서 이 함수 호출을 주석으로 주석으로 남기기만 하면 됩니다. 그 결과 선택을 수행하는 대신 코드에서 선택 상자의 내용을 창으로 렌더링합니다. 이렇게 하면 픽 박스 안에 무엇이 있는지 시각적으로 볼 수 있습니다. 예제 13-3은 간단한 선택을 보여 줍니다. 또한 선택한 개체의 행과 열을 사용하여 기본 요소의 다른 구성 요소를 식별하는 방법을 보여 줍니다. 사각형의 3 ́3 격자가 그려지고 각 사각형은 다른 색상으로 표시됩니다. 보드[3][3] 배열은 각 사각형의 현재 파란색 양을 유지합니다. 왼쪽 마우스 단추를 누르면 mouse에서 선택한 사각형을 식별하기 위해 pickSquares() 루틴이 호출됩니다. 두 개의 이름은 그리드의 각 사각형을 식별합니다. 또한 왼쪽 마우스 버튼을 누르면 커서 위치 아래의 모든 사각형의 색상이 변경됩니다. 또 다른 방법은 눈 좌표에서 광선을 생성하고 ModelView 행렬의 역으로 변환하는 것입니다. 눈 좌표에서 선택 광선 원점은 간단합니다(0, 0, 0).

예를 들어, 원근 투영 매개변수에서 선택 광선 벡터를 작성할 수 있습니다.이 예제에서는 이 예제에서는 처음 두 개체에 고유한 이름이 있고 세 번째 및 네 번째 개체는 단일 이름을 공유합니다. 이 설정을 사용하면 세 번째 오브젝트와 네 번째 오브젝트 중 하나 또는 둘 다선택 적중을 일으키면 하나의 적중 레코드만 반환됩니다. 적중 레코드를 처리할 때 여러 개체가 동일한 이름을 공유하도록 할 수 있습니다. 별로 권장되지는 않지만이 기술은 정말 유용 할 수 있습니다. 하지만 따기로 는 상당히 제한되어 있습니다. 다른 두 자습서의 메서드는 충돌 감지, 아바타 보행, AI에 대한 가시성 쿼리 등과 같은 다른 용도로 사용할 수 있습니다. gluPickMatrix()에 의해 생성 된 매트릭스의 순 결과는 단위 큐브 -1 ( X, Y, z) £ 1 (또는 -w (WX, 와이, WZ) £ W로 클리핑 영역을 변환하는 것입니다. 피킹 행렬은 이 단위 큐브의 하위 영역을 단위 큐브에 매핑하는 직교 변환을 효과적으로 수행합니다.

변환은 임의이므로 창의 회전된 직사각형 부분과 같은 다양한 종류의 영역에 대해 선택 작업을 수행할 수 있습니다. 특정 상황에서는 선택 영역을 정의하기 위해 추가 클리핑 평면을 더 쉽게 지정할 수 있습니다. 이 자습서의 소스 코드는 매우 의미 있는 이름인 misc05_picking/misc05_picking_slow_easy.cpp에서 사용할 수 있습니다. 선택 모드에서 보기 볼륨과 교차하는 기본 으로 인해 선택 적중이 발생합니다. 이름 스택 조작 명령이 실행되거나 glRenderMode()가 호출될 때마다 OpenGL은 스택이 마지막으로 조작되었거나 glRenderMode()가 호출된 이후 적중이 있는 경우 선택 배열에 적중 레코드를 씁니다.