|
draw하실때 이름을 제대로 부여하셨음을 가정하고...
화면클릭시 이벤트가 저절로 오는게 하니고
Messgae를 가로채야 합니다.
재정의한 WindowProc에서
WM_LBUTTONDOWN 또는 WM_LBUTTONUP메시지가 오면
관련 Opengl함수를 Call하여 현재 mouse위치 근처에 있는 이름이 있는 물체를 찾아내야합니다.
참고> 소스
void CDrawManager::Pick_at_MousePos(int pX,int pY) //함수로 만들어 현재 마우스 위치를 건네주면...
{
GLuint selectBuff[64] = {0};
GLint hitNo= 0;
wglMakeCurrent(m_hDC, m_hRC);
glSelectBuffer(64, selectBuff);
glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
//gluPickMatrix((Pickrect.right+Pickrect.left)/2.,m_viewport[3]-(Pickrect.bottom+Pickrect.top)/2., Pickrect.Width(), Pickrect.Height(), m_viewport);
gluPickMatrix(pX,m_viewport[3]-pY,8,8,m_viewport);
glOrtho(-abs(m_rtView.Width()) / 2., abs(m_rtView.Width()) / 2.,
-abs(m_rtView.Height()) / 2., abs(m_rtView.Height()) / 2., 1.0, ZAXIS_DISTANCE * 2.);
//gluPerspective(45.0f,m_viewport[2]/(GLfloat)m_viewport[3], 1.0, ZAXIS_DISTANCE * 2.);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// View Matrix 설정
int nScrCenterX = (m_rtView.left + m_rtView.right) / 2; // 화면 중앙 좌표
int nScrCenterY = (m_rtView.top + m_rtView.bottom) / 2;
gluLookAt(nScrCenterX + ((ZAXIS_DISTANCE * m_sinX) * m_sinZ),
nScrCenterY + ((ZAXIS_DISTANCE * m_sinX) * m_cosZ),
m_nScrCenterZ + (ZAXIS_DISTANCE * m_cosX),
nScrCenterX, nScrCenterY, m_nScrCenterZ,
m_cosX * m_sinZ, m_cosX * m_cosZ, -m_sinX);
RenderWireframe(TRUE);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glFlush();
hitNo = glRenderMode(GL_RENDER);
if(hitNo > 0) { //찾으면 0이상이 나옴
이정도로 참고해서 함 해보세요..
|