 <p>Solved <strong><em>partially</strong> (please read bottom of this)</em> separating up\down movement from left\right: changed the above mousemove function to</p> <pre><code>if (event-&gt;buttons() &amp; Qt::RightButton) { setMatrixes(); gluUnProject(event-&gt;x(), -event-&gt;y(), 0, model_matrix, proj_matrix, view_matrix, &amp;newx, &amp;newy, &amp;newz); float acc=sqrt((int)dx^2+(int)dy^2); acc*=acc; qDebug()&lt;&lt; acc; if (dy&lt;dx){ if (event-&gt;x()&gt;lastPos.x()){ emit SignalPreviewMouseChanged((float)(newx/2500)*acc,0,(float)(-newz/2500)*acc); } else { emit SignalPreviewMouseChanged((float)(-newx/2500)*acc,0,(float)(newz/2500)*acc); } } else{ if (event-&gt;y()&lt;lastPos.y()) emit SignalPreviewMouseChanged(0,(float)(newy/1750)*acc,0); else { emit SignalPreviewMouseChanged(0,(float)(-newy/1750)*acc,0); } } isPressed=true; } lastPos = event-&gt;pos(); updateGL(); </code></pre> <p>while in the controller:</p> <pre><code>void Controller::SlotMouseTranslationValueChanged(float val1, float val2, float val3){ if (val1!=0) sceneRef-&gt;translate(val1,0,0); if (val2!=0) sceneRef-&gt;translate(0,val2,0); if (val3!=0) sceneRef-&gt;translate(0,0,val3); facade-&gt;window-&gt;getPreview()-&gt;RebuildScene(); } </code></pre> <p>Now it has no lag and everything works fine.</p> <p><strong>Consideration:</strong></p> <p><em>Now I am not dragging the object but using the gluUnproject to retrieve the plan on which my object can move (then calling translate function that add\sub values to object position).So where my mouse points to is different from the position of the object on my screen.</em></p> <p>How to achieve this result?could someone explain me the logical steps?</p>