diff --git a/qglengine/qglview.cpp b/qglengine/qglview.cpp index d3fe9eb..2534ebd 100644 --- a/qglengine/qglview.cpp +++ b/qglengine/qglview.cpp @@ -280,8 +280,9 @@ void QGLView::mouseMoveEvent(QMouseEvent * e) { if (cur_handle >= RendererService::htRotateX && cur_handle <= RendererService::htRotateZ) axis -= RendererService::htRotateX; if (cur_handle >= RendererService::htScaleX && cur_handle <= RendererService::htScaleZ ) axis -= RendererService::htScaleX; QVector3D axe_vector; axe_vector[axis] = 1.; - QVector3D center_screen = camera()->fullViewMatrix() * rs.selection_center; - QVector3D axe_screen = ((camera()->fullViewMatrix() * (rs.selection_center + axe_vector)) - center_screen).normalized(); + QMatrix4x4 axis_mat = camera()->fullViewMatrix() * rs.axis_mat; + QVector3D center_screen = axis_mat * rs.selection_center; + QVector3D axe_screen = ((axis_mat * (rs.selection_center + axe_vector)) - center_screen).normalized(); QVector3D mouse_vector(cpos - lastPos); mouse_vector[1] *= -1.; if (cur_handle >= RendererService::htMoveX && cur_handle <= RendererService::htMoveZ) { diff --git a/qglengine/renderer_service.cpp b/qglengine/renderer_service.cpp index 99bf80b..f45f54d 100644 --- a/qglengine/renderer_service.cpp +++ b/qglengine/renderer_service.cpp @@ -37,7 +37,7 @@ RendererService::RendererService(Renderer * r_): r(r_) { QMatrix4x4 m; m.rotate(90., _rot[i]); mat_xyz[i] = m; - color_xyz[i] = QVector4D(0,0,0,1); + color_xyz[i] = QVector4D(0,0,0,0.667); color_xyz[i][i] = 1.; } axis_camera = new Camera(); @@ -155,13 +155,13 @@ bool RendererService::fillCurrentHandleObjects() { selection_center = sol[0]->worldPos(); else selection_center = bb.center(); - QMatrix4x4 rm; + axis_mat = QMatrix4x4(); if ((sol.size() == 1) && (current_handle >= htRotateX)) { - rm.rotate(sol[0]->angles_.z(), 0., 0., 1.); - rm.rotate(sol[0]->angles_.y(), 0., 1., 0.); - rm.rotate(sol[0]->angles_.x(), 1., 0., 0.); + axis_mat.rotate(sol[0]->angles_.z(), 0., 0., 1.); + axis_mat.rotate(sol[0]->angles_.y(), 0., 1., 0.); + axis_mat.rotate(sol[0]->angles_.x(), 1., 0., 0.); } - fillHandleObjects(selection_center, current_handle, rm); + fillHandleObjects(selection_center, current_handle, axis_mat); return true; } @@ -211,11 +211,14 @@ void RendererService::renderService() { /// handles if (fillCurrentHandleObjects()) { + f->glEnable(GL_BLEND); + f->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Mesh * hm = currentHandleMesh(); if (hm) { hm->loadObjects(r->view, cur_objects); hm->draw(f, 3); } + f->glDisable(GL_BLEND); } /// axis diff --git a/qglengine/renderer_service.h b/qglengine/renderer_service.h index 3f5fda9..08561d4 100644 --- a/qglengine/renderer_service.h +++ b/qglengine/renderer_service.h @@ -64,7 +64,7 @@ private: Mesh * axis_mesh, * handle_move_mesh, * handle_rotate_mesh, * handle_scale_mesh; Mesh * box_mesh_f, * omni_mesh_f, * box_mesh, * omni_mesh; - QMatrix4x4 v_mat; + QMatrix4x4 v_mat, axis_mat; QVector3D selection_center; QVector mat_xyz; QVector color_xyz;