Lines 23-29
OGLWindow::OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEve
Link Here
|
23 |
, meZoomLevel( media::ZoomLevel_ORIGINAL ) |
23 |
, meZoomLevel( media::ZoomLevel_ORIGINAL ) |
24 |
, m_aLastMousePos(Point(0,0)) |
24 |
, m_aLastMousePos(Point(0,0)) |
25 |
, m_bIsOrbitMode( false ) |
25 |
, m_bIsOrbitMode( false ) |
26 |
, m_fCameraDistance(0.0) |
|
|
27 |
{ |
26 |
{ |
28 |
} |
27 |
} |
29 |
|
28 |
|
Lines 267-281
IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
Link Here
|
267 |
glm::vec3 vMove = vView-vEye; |
266 |
glm::vec3 vMove = vView-vEye; |
268 |
vMove = glm::normalize(vMove); |
267 |
vMove = glm::normalize(vMove); |
269 |
vMove *= 25.0f; |
268 |
vMove *= 25.0f; |
270 |
glm::vec3 vStrafe = glm::cross(vView-vEye, vUp); |
269 |
glm::vec3 vStrafe = glm::cross(vMove, vUp); |
271 |
vStrafe = glm::normalize(vStrafe); |
270 |
vStrafe = glm::normalize(vStrafe); |
272 |
vStrafe *= 25.0f; |
271 |
vStrafe *= 25.0f; |
273 |
glm::vec3 vMup = glm::cross(vView-vEye,glm::vec3(1.0f,0.0f,0.0f) ); |
272 |
glm::vec3 vMup = vUp * 25.0f; |
274 |
vMup = glm::normalize(vMup); |
|
|
275 |
vMup *= 25.0f; |
276 |
|
273 |
|
277 |
if( !m_bIsOrbitMode ) |
274 |
if( !m_bIsOrbitMode ) |
278 |
{ |
275 |
{ |
|
|
276 |
if(nCode == KEY_E)vMoveBy += vMup*(0.0005f*fModelSize); |
277 |
if(nCode == KEY_Q)vMoveBy -= vMup*(0.0005f*fModelSize); |
279 |
if(nCode == KEY_W)vMoveBy += vMove*(0.0005f*fModelSize); |
278 |
if(nCode == KEY_W)vMoveBy += vMove*(0.0005f*fModelSize); |
280 |
if(nCode == KEY_S)vMoveBy -= vMove*(0.0005f*fModelSize); |
279 |
if(nCode == KEY_S)vMoveBy -= vMove*(0.0005f*fModelSize); |
281 |
if(nCode == KEY_A)vMoveBy -= vStrafe*(0.0005f*fModelSize); |
280 |
if(nCode == KEY_A)vMoveBy -= vStrafe*(0.0005f*fModelSize); |
Lines 283-297
IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
Link Here
|
283 |
} |
282 |
} |
284 |
else |
283 |
else |
285 |
{ |
284 |
{ |
286 |
if(nCode == KEY_E)vMoveBy += vMove*(0.0005f*fModelSize); |
285 |
bool bZoomIn = false; |
287 |
if(nCode == KEY_Q)vMoveBy -= vMove*(0.0005f*fModelSize); |
286 |
bool bZoomOut = false; |
|
|
287 |
if(nCode == KEY_E) |
288 |
{ |
289 |
vMoveBy += vMove*(0.0005f*fModelSize); |
290 |
bZoomIn = true; |
291 |
} |
292 |
if(nCode == KEY_Q) |
293 |
{ |
294 |
vMoveBy -= vMove*(0.0005f*fModelSize); |
295 |
bZoomOut = true; |
296 |
} |
288 |
|
297 |
|
289 |
// Limit zooming in orbit mode |
298 |
// Limit zooming in orbit mode |
290 |
m_fCameraDistance += vMoveBy.z; |
299 |
float fCameraDistFromModelGlobe = glm::length(vEye + vMoveBy - vView) - fModelSize / 2.0f; |
291 |
if ((m_fCameraDistance < 0.5 * fModelSize && vMoveBy.z < 0.0 ) || |
300 |
if ((fCameraDistFromModelGlobe < 0.5 * fModelSize && bZoomIn ) || |
292 |
(m_fCameraDistance > 2 * fModelSize && vMoveBy.z > 0.0 )) |
301 |
(fCameraDistFromModelGlobe > 2 * fModelSize && bZoomOut )) |
293 |
{ |
302 |
{ |
294 |
m_fCameraDistance -= vMoveBy.z; |
|
|
295 |
vMoveBy = glm::vec3(0.0); |
303 |
vMoveBy = glm::vec3(0.0); |
296 |
} |
304 |
} |
297 |
} |
305 |
} |
Lines 333-344
IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
Link Here
|
333 |
{ |
341 |
{ |
334 |
gltf_orbit_mode_start(&m_rHandle); |
342 |
gltf_orbit_mode_start(&m_rHandle); |
335 |
m_bIsOrbitMode = true; |
343 |
m_bIsOrbitMode = true; |
336 |
// Set default camera distance |
|
|
337 |
glm::vec3 vEye; |
338 |
glm::vec3 vView; |
339 |
glm::vec3 vUp; |
340 |
gltf_get_camera_pos(&m_rHandle, &vEye,&vView,&vUp); |
341 |
m_fCameraDistance = vEye.z - gltf_get_model_center_pos(&m_rHandle)->z - (gltf_get_model_size(&m_rHandle)/2.0); |
342 |
} |
344 |
} |
343 |
} |
345 |
} |
344 |
else if(nCode == KEY_F) |
346 |
else if(nCode == KEY_F) |