opengl 질문입니다
글쓴이: qkrtntjd / 작성시간: 목, 2014/07/24 - 10:58오전
opengl로 물체를 그리고 그 물체의 색을 바꾸는 것 까지는 했습니다
void GLWidget::mouseDoubleClickEvent(QMouseEvent *event) { int face = faceAtPosition(event->pos()); qDebug() << "mouse pos :" << event->pos(); qDebug() << "face :" << face; if (face != -1) { QColor color = QColorDialog::getColor(faceColors, this); if (color.isValid()) { faceColors = color; colours[selectedObj] = faceColors; updateGL(); } } qDebug() << "double click"; }
int GLWidget::faceAtPosition(const QPoint &pos) { qDebug() << "faceatpostion" ; const int MaxSize = 512; GLuint buffer[512]; GLint viewport[4]; makeCurrent(); glGetIntegerv(GL_VIEWPORT, viewport); // glPushAttrib(GL_ALL_ATTRIB_BITS); glSelectBuffer(MaxSize, buffer); glRenderMode(GL_SELECT); glInitNames(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPickMatrix(GLdouble(pos.x()), GLdouble(viewport[3] - pos.y()), 5.0, 5.0, viewport); glOrtho(-3000.0, 3000.0, -3000.0, 3000.0, -30000.0, 30000.0); GLfloat x = ww / hh; if(isloaded){ glMatrixMode(GL_MODELVIEW); drawMarkers(); } glMatrixMode(GL_PROJECTION); glPopMatrix(); glFlush(); if (!glRenderMode(GL_RENDER)){ qDebug() <<"return"; return -1; } ProcessSelect(buffer); return buffer[3]; }
void GLWidget::ProcessSelect(GLuint index[512]) { selectedObj=index[3]; qDebug() << "index[3]" << index[3]; updateGL(); switch(index[3]) { case 0: qDebug() << "0 click"; break; case 1: qDebug() << "1 click"; break; case 2: qDebug() << "2 click"; break; case 3: qDebug() << "3 click"; break; case 4: qDebug() << "4 click"; break; case 5: qDebug() << "5 click"; break; case 6: qDebug() << "6 click"; break; case 7: qDebug() << "7 click"; break; case 8: qDebug() << "8 click"; break; case 9: qDebug() << "9 click"; break; case 10: qDebug() << "10 click"; break; case 11: qDebug() << "11 click"; break; case 12: qDebug() << "12 click"; break; case 13: qDebug() << "13 click"; break; case 14: qDebug() << "14 click"; break; case 15: qDebug() << "15 click"; break; case 100: qDebug() << "100 click"; break; default: qDebug() << "what?"; break; } }
현재 더블클릭한 곳에 물체를 있는지 확인하고 있으면 색을 바꿔주는것인데요
지금 목표는 물체를 드래그 하여 움직이려고 합니다
막상 해보니 마우스 누른 곳과 뗀 곳의 좌표의 차이를 계산하여 이동거리를 계산하여 최종 물체를 이동시키긴 하였는데
이렇게 되면 물체가 그럼 순간이동되는 것 처럼 보이는데 드래그 하여 마우스에 붙어?다니면서 이동할 수 있도록 하는 방법이 있을까요?
검색할때 뭐라고 피킹 이동 등등으로 검색해도 잘 안나오더군요..
있다면 참고 자료나 조언좀 부탁드립니다.
Forums:
글작성자입니다
mousemove 이벤트에서 그리니 순간이동현상은 안나타나면서 그려지긴합니다
그러나 물체가 3d 좌표상에 있고 마우스는 2d평면에서 움직이니 어떤식으로 계산을 해야할지 모르겠습니다
혹시 좋은 아이디어 있을까요?
Orthogonal View 인 경우에는 Top
Orthogonal View 인 경우에는 Top view, Side view, Front view 로 나누어 이동시키면 됩니다.
예를 들어 Front view 에서는 3D 의 x, y 좌표만 움직이게 되죠.
Perspective view 나 회전된 경우에는 매트릭스를 사용하여 구현해야 합니다.
아이디가 어렵네요. 저는 세벌식을
아이디가 어렵네요. 저는 세벌식을 써서...
질문하신 내용을 보니 한국어보다 영어로 된 사이트에서 답 나올 확률이 많아보입니다.
구글에 물어보실 것을 권장합니다.
세벌 https://sebuls.blogspot.kr/
마우스 릴리즈가 아니고, 마우스 무브에서 움직임
마우스 릴리즈가 아니고, 마우스 무브에서 움직임 처리를 해줘야 합니다.
댓글 달기