C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50393] Re:opengl 에서 picking 어떻게 해야 하나요..
누군가 [] 2819 읽음    2007-08-27 16:00
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이상이 나옴

이정도로 참고해서 함 해보세요..

+ -

관련 글 리스트
50389 opengl 에서 picking 어떻게 해야 하나요.. ㅇr7I 2569 2007/08/27
50393     Re:opengl 에서 picking 어떻게 해야 하나요.. 누군가 2819 2007/08/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.