Merge pull request #22 from andreja6/MusicalProgrammer
Fixed a camera zooming bug.
This commit is contained in:
@@ -49,6 +49,13 @@ CoordinateFrame CameraController::getCoordinateFrame() {
|
|||||||
return cf;
|
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)
|
void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY)
|
||||||
{
|
{
|
||||||
yaw+=spdX;
|
yaw+=spdX;
|
||||||
@@ -60,24 +67,40 @@ void CameraController::pan(CoordinateFrame* frame,float spdX, float spdY)
|
|||||||
frame->lookAt(focusPosition);
|
frame->lookAt(focusPosition);
|
||||||
}
|
}
|
||||||
bool CameraController::onMouseWheel(int x, int y, short delta)
|
bool CameraController::onMouseWheel(int x, int y, short delta)
|
||||||
|
{
|
||||||
|
Zoom(delta);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void CameraController::Zoom(short delta)
|
||||||
{
|
{
|
||||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||||
|
|
||||||
if (delta>0) { // Mouse wheel up
|
if (delta>0) { // Mouse wheel up
|
||||||
|
CoordinateFrame zoomFrame = frame+frame.lookVector()*(zoom/5);
|
||||||
|
zoom=(zoomFrame.translation-focusPosition).magnitude();
|
||||||
if (zoom>CAM_ZOOM_MIN)
|
if (zoom>CAM_ZOOM_MIN)
|
||||||
frame = frame+frame.lookVector()*(zoom/5);
|
{
|
||||||
|
setFrame(zoomFrame);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zoom=CAM_ZOOM_MIN;
|
||||||
|
refreshZoom(frame);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
CoordinateFrame zoomFrame = frame-frame.lookVector()*(zoom/5);
|
||||||
|
zoom=(zoomFrame.translation-focusPosition).magnitude();
|
||||||
if (zoom<CAM_ZOOM_MAX)
|
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()
|
void CameraController::panLeft()
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class CameraController {
|
|||||||
|
|
||||||
void setFrame(const CoordinateFrame& cf);
|
void setFrame(const CoordinateFrame& cf);
|
||||||
void lookAt(const Vector3& position);
|
void lookAt(const Vector3& position);
|
||||||
|
void refreshZoom(const CoordinateFrame& frame);
|
||||||
void pan(CoordinateFrame* frame,float spdX,float spdY);
|
void pan(CoordinateFrame* frame,float spdX,float spdY);
|
||||||
void update(Demo* demo);
|
void update(Demo* demo);
|
||||||
void centerCamera(Instance* selection);
|
void centerCamera(Instance* selection);
|
||||||
@@ -23,6 +24,7 @@ class CameraController {
|
|||||||
void panRight();
|
void panRight();
|
||||||
void tiltUp();
|
void tiltUp();
|
||||||
void tiltDown();
|
void tiltDown();
|
||||||
|
void Zoom(short delta);
|
||||||
bool onMouseWheel(int x, int y, short delta);
|
bool onMouseWheel(int x, int y, short delta);
|
||||||
GCamera* getCamera();
|
GCamera* getCamera();
|
||||||
private:
|
private:
|
||||||
|
|||||||
4
main.cpp
4
main.cpp
@@ -171,9 +171,9 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
if(button->name == "CenterCam")
|
if(button->name == "CenterCam")
|
||||||
usableApp->cameraController.centerCamera(selectedInstance);
|
usableApp->cameraController.centerCamera(selectedInstance);
|
||||||
else if(button->name == "ZoomIn")
|
else if(button->name == "ZoomIn")
|
||||||
cameraPos = Vector3(cameraPos.x, cameraPos.y, cameraPos.z) + frame.lookVector()*2;
|
usableApp->cameraController.Zoom(1);
|
||||||
else if(button->name == "ZoomOut")
|
else if(button->name == "ZoomOut")
|
||||||
cameraPos = Vector3(cameraPos.x, cameraPos.y, cameraPos.z) - frame.lookVector()*2;
|
usableApp->cameraController.Zoom(-1);
|
||||||
else if(button->name == "PanRight")
|
else if(button->name == "PanRight")
|
||||||
usableApp->cameraController.panRight();
|
usableApp->cameraController.panRight();
|
||||||
else if(button->name == "PanLeft")
|
else if(button->name == "PanLeft")
|
||||||
|
|||||||
Reference in New Issue
Block a user