Kaydet (Commit) 9a670eb4 authored tarafından Zolnai Tamás's avatar Zolnai Tamás

glTF: constraine camera move in orbit mode

Not to get too close to / too far from the model.
Too close means move into the model.

Change-Id: Ie25d87c88093d4baaf98f13ab8239263b5e1bf66
üst 0b3a9188
...@@ -21,6 +21,7 @@ OGLWindow::OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEve ...@@ -21,6 +21,7 @@ OGLWindow::OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEve
, m_bVisible ( false ) , m_bVisible ( false )
, m_aLastMousePos(Point()) , m_aLastMousePos(Point())
, m_bIsOrbitMode( false ) , m_bIsOrbitMode( false )
, m_fCameraDistance(0.0)
{ {
} }
...@@ -261,6 +262,16 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent) ...@@ -261,6 +262,16 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
if(nCode == KEY_A)vMoveBy -= vStrafe*(0.0005f*fModelSize); if(nCode == KEY_A)vMoveBy -= vStrafe*(0.0005f*fModelSize);
if(nCode == KEY_D)vMoveBy += vStrafe*(0.0005f*fModelSize); if(nCode == KEY_D)vMoveBy += vStrafe*(0.0005f*fModelSize);
} }
else
{
// Limit zooming in orbit mode
m_fCameraDistance += vMoveBy.z;
if (m_fCameraDistance < 0.75 * fModelSize || m_fCameraDistance > 2 * fModelSize)
{
m_fCameraDistance -= vMoveBy.z;
vMoveBy = glm::vec3(0.0);
}
}
} }
gltf_renderer_move_camera(&m_rHandle, vMoveBy.x, vMoveBy.y, vMoveBy.z, 0.0); gltf_renderer_move_camera(&m_rHandle, vMoveBy.x, vMoveBy.y, vMoveBy.z, 0.0);
} }
...@@ -275,6 +286,12 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent) ...@@ -275,6 +286,12 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
{ {
gltf_orbit_mode_start(&m_rHandle); gltf_orbit_mode_start(&m_rHandle);
m_bIsOrbitMode = true; m_bIsOrbitMode = true;
// Set default camera distance
glm::vec3 vEye;
glm::vec3 vView;
glm::vec3 vUp;
gltf_get_camera_pos(&m_rHandle, &vEye,&vView,&vUp);
m_fCameraDistance = vEye.z - gltf_get_model_center_pos(&m_rHandle)->z;
} }
} }
else if(nCode == KEY_F) else if(nCode == KEY_F)
......
...@@ -68,9 +68,11 @@ private: ...@@ -68,9 +68,11 @@ private:
glTFHandle& m_rHandle; glTFHandle& m_rHandle;
OpenGLContext& m_rContext; OpenGLContext& m_rContext;
Window& m_rEventHandler; Window& m_rEventHandler;
bool m_bVisible; bool m_bVisible;
Point m_aLastMousePos; Point m_aLastMousePos;
bool m_bIsOrbitMode; bool m_bIsOrbitMode;
double m_fCameraDistance;
}; };
} // namespace ogl } // namespace ogl
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment