void mouse(double x, double y){ if(rotating){ vec3 beg = screenToSphere(start.x, start.y); vec3 end = screenToSphere(x,HEIGHT-y); glm::vec3 axis = glm::normalize(glm::cross(beg,end)); float phi = glm::distance(beg, end)/4; glm::vec3 newAxis = glm::normalize(glm::mat3(glm::inverse(glm::toMat4(trans.r))*glm::inverse(camera.getView()))*axis); trans.r = glm::rotate(trans.r, glm::degrees(phi)*0.3f, newAxis); start = gd->getMousePos(); } if(translating){ glm::vec2 delta = gd->getMousePos() - panStart; delta.x /= WIDTH; delta.y /= HEIGHT; glm::vec3 newDelta = glm::mat3(glm::inverse(glm::toMat4(trans.r))*glm::inverse(camera.getView()))*glm::vec3(delta.x,delta.y,0.0); trans.t = trans.t + newDelta*3.0f; panStart = gd->getMousePos(); } camera.apply(trans); }
void mouseScroll(double x, double y){ if(y < 0.0) trans.s *= 0.95; else trans.s *= 1.05; camera.apply(trans); }