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/
마우스 릴리즈가 아니고, 마우스 무브에서 움직임
마우스 릴리즈가 아니고, 마우스 무브에서 움직임 처리를 해줘야 합니다.
댓글 달기