Fixed a camera zooming bug.

This commit is contained in:
MusicalProgrammer
2018-06-02 16:29:34 -04:00
parent b1a7aac481
commit db9e030b53
3 changed files with 36 additions and 11 deletions

View File

@@ -49,6 +49,13 @@ CoordinateFrame CameraController::getCoordinateFrame() {
return cf;
}
void CameraController::refreshZoom(const CoordinateFrame& frame)
{
CoordinateFrame zoomFrame = focusPosition-frame.lookVector()*zoom;
zoomFrame.lookAt(focusPosition);
setFrame(zoomFrame);
}
void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY)
{
yaw+=spdX;
@@ -60,24 +67,40 @@ void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY)
frame->lookAt(focusPosition);
}
bool CameraController::onMouseWheel(int x, int y, short delta)
{
Zoom(delta);
return true;
}
void CameraController::Zoom(short delta)
{
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
if (delta>0) { // Mouse wheel up
CoordinateFrame zoomFrame = frame+frame.lookVector()*(zoom/5);
zoom=(zoomFrame.translation-focusPosition).magnitude();
if (zoom>CAM_ZOOM_MIN)
frame = frame+frame.lookVector()*(zoom/5);
{
setFrame(zoomFrame);
}
else
{
zoom=CAM_ZOOM_MIN;
refreshZoom(frame);
}
}
else {
CoordinateFrame zoomFrame = frame-frame.lookVector()*(zoom/5);
zoom=(zoomFrame.translation-focusPosition).magnitude();
if (zoom<CAM_ZOOM_MAX)
frame = frame-frame.lookVector()*(zoom/5);
{
setFrame(zoomFrame);
}
else
{
zoom=CAM_ZOOM_MAX;
refreshZoom(frame);
}
}
zoom=(frame.translation-focusPosition).magnitude();
if (zoom<CAM_ZOOM_MIN) zoom=CAM_ZOOM_MIN;
if (zoom>CAM_ZOOM_MAX) zoom=CAM_ZOOM_MAX;
setFrame(frame);
return true;
}
void CameraController::panLeft()