Drag & Drop
Help me plz.
I don''t know how resolve this problem: i have to drag and drop a cube. Now i can pick it up and if i hold the left button on i can change it position, but the scene doesn''t update and i don''t see my cube moving.
If i reshape the screen the cube appear in the new and correct position.
Down here i post my code, with the hope someone can help me (plz do not tell me dude or lamer or something similar,..... i just know it by myself).
//Convert screen coordinates to OpenGL coordinates.
GLdouble *GetOGLPos(int x, int y)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble pos[3];
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &pos[0],&pos[1],
&pos[2]);
return pos;
}
#define BUFSIZE 512
void pickPacket(int button, int state, int x, int y) {
GLuint selectBuf[BUFSIZE];
GLint hits;
GLint viewport[4];
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
glGetIntegerv(GL_VIEWPORT, viewport);
glSelectBuffer(BUFSIZE, selectBuf);
(void) glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
/* create 1x1 pixel picking region near cursor location */
gluPickMatrix((GLdouble) x, (GLdouble) (viewport[3] - y),
0.01, 0.01, viewport);
//glOrtho(-8, 8, -6, 6, -100, 100);
glOrtho(-8*zoomfactor-translatefactor,8*zoomfactor-translatefactor,
-6*zoomfactor, 6*zoomfactor, -100, 100);
drawScene(GL_SELECT);
glPopMatrix();
glutSwapBuffers();
reshape(Width, Height);
hits = glRenderMode(GL_RENDER);
if(hits>1) {
Hitten=selectBuf[7];
}
processHits(hits, selectBuf);
}
if (button == GLUT_LEFT_BUTTON && state == GLUT_UP)
Hitten=0;
}
void myMovedMouse(int x, int y) {
if(Hitten!=0) {
Container *tmp;
Packet *tmp_pkt;
tmp=Cont;
while(tmp->Obj->name!=Hitten) tmp=tmp->next;
GLfloat X,Y,Z;
X=GetOGLPos(x,y)[0];
Y=GetOGLPos(x,y)[1];
Z=GetOGLPos(x,y)[2];
Modifica_Origine(X, Y, Z, tmp->Obj);
//glutPostRedisplay();
}
}
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement