SparrowRenderer/focuscontroller.cpp

51 lines
1.1 KiB
C++

#include "focuscontroller.h"
#include "camera.h"
#include <glm/ext.hpp>
void FocusController::setFocus(glm::vec3* object)
{
track = object;
dist = glm::distance2(*track, camera->getPosition());
}
void FocusController::mouseMove(int dx, int dy)
{
bool needUpdate = false;
if(dist < 0)
dist = glm::distance2(*track, camera->getPosition());
if(grabbed & 1)
{
camera->rotate(glm::vec2(dx*0.01f, dy*0.01f));
needUpdate = true;
}
if(grabbed & 4)
{
dist += dy*0.02f;
needUpdate = true;
}
if(needUpdate)
updateCamera();
}
void FocusController::mouseWheelEvent(int scrollCount)
{
if(dist < 0)
dist = glm::distance2(*track, camera->getPosition());
dist += scrollCount/600.0f;
updateCamera();
}
void FocusController::updateCamera()
{
glm::vec2 rot = camera->getRotation();
glm::vec3 pos = glm::vec3(std::sin(-rot.x)*std::cos(rot.y),
std::sin(rot.y),
std::cos(-rot.x)*std::cos(rot.y));
camera->moveTo(*track + dist*pos);
}