diff options
author | Tomi Korpipää <tomi.korpipaa@theqtcompany.com> | 2015-05-29 06:30:43 +0300 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@digia.com> | 2015-05-29 05:01:03 +0000 |
commit | 12f93b58b07c58096470141467eb48363648d915 (patch) | |
tree | c8690233ebd4c33f5d56f6fe65fc06b941e38570 /examples | |
parent | 09b666f5158d8d35772f9a5588be5812a694862d (diff) |
Fixed camera jumps in planets example
Change-Id: If72f2e7f7110d4ac58862cde019fa25b3cf5fdca
Task-number: QTBUG-46370
Reviewed-by: Titta Heikkala <titta.heikkala@theqtcompany.com>
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/canvas3d/canvas3d/threejs/planets/planets.js | 39 | ||||
-rw-r--r-- | examples/canvas3d/canvas3d/threejs/planets/planets.qml | 6 |
2 files changed, 23 insertions, 22 deletions
diff --git a/examples/canvas3d/canvas3d/threejs/planets/planets.js b/examples/canvas3d/canvas3d/threejs/planets/planets.js index bf281ce..e150b08 100644 --- a/examples/canvas3d/canvas3d/threejs/planets/planets.js +++ b/examples/canvas3d/canvas3d/threejs/planets/planets.js @@ -446,6 +446,7 @@ function setLookAtOffset() { var planet = 0; if (qmlView.focusedPlanet !== SOLAR_SYSTEM) planet = qmlView.oldPlanet; + var focusedPlanetPosition = objects[planet].position.clone(); offset.sub(focusedPlanetPosition); @@ -463,7 +464,7 @@ function setCameraOffset() { if (qmlView.focusedPlanet !== SOLAR_SYSTEM) planet = qmlView.focusedPlanet; - var newCameraPosition = getNewCameraPosition(planets[planet]["radius"]); + var newCameraPosition = getNewCameraPosition(getOuterRadius(planet)); if (qmlView.focusedPlanet !== SUN) offset.sub(newCameraPosition); @@ -621,25 +622,10 @@ function paintGL(canvas) { sun.updateMatrix(); // calculate the outer radius of the focused item - var outerRadius = 0; - if (qmlView.focusedPlanet !== SOLAR_SYSTEM) { - outerRadius = planets[qmlView.focusedPlanet]["radius"]; - if (qmlView.focusedPlanet === SATURN) { - outerRadius =+ saturnOuterRadius; - } else if (qmlView.focusedPlanet === URANUS) { - outerRadius =+ uranusOuterRadius; - } else if (qmlView.focusedPlanet === SUN) { - outerRadius = planets[qmlView.focusedPlanet]["radius"] / 100; - } - } + var outerRadius = getOuterRadius(qmlView.focusedPlanet); // get the appropriate near plane position for the camera and animate it with QML animations - if (qmlView.focusedPlanet === SOLAR_SYSTEM) - qmlView.cameraNear = 2500000; - else if (qmlView.focusedPlanet === SUN) - qmlView.cameraNear = planets[qmlView.focusedPlanet]["radius"] / 100; - else - qmlView.cameraNear = planets[qmlView.focusedPlanet]["radius"]; + qmlView.cameraNear = outerRadius; camera.near = qmlView.cameraNear; camera.updateProjectionMatrix(); @@ -667,3 +653,20 @@ function paintGL(canvas) { renderer.render(scene, camera); } + +function getOuterRadius( planet ) { + + var outerRadius = 2500000; + if (planet !== SOLAR_SYSTEM) { + outerRadius = planets[planet]["radius"]; + if (planet === SATURN) { + outerRadius =+ saturnOuterRadius; + } else if (planet === URANUS) { + outerRadius =+ uranusOuterRadius; + } else if (planet === SUN) { + outerRadius = planets[planet]["radius"] / 100; + } + } + + return outerRadius; +} diff --git a/examples/canvas3d/canvas3d/threejs/planets/planets.qml b/examples/canvas3d/canvas3d/threejs/planets/planets.qml index 3253d9d..4b4d313 100644 --- a/examples/canvas3d/canvas3d/threejs/planets/planets.qml +++ b/examples/canvas3d/canvas3d/threejs/planets/planets.qml @@ -80,7 +80,6 @@ Item { } //! [1] onFocusedPlanetChanged: { - if (focusedPlanet == 100) { info.opacity = 0; updatePlanetInfo(); @@ -93,9 +92,8 @@ Item { GLCode.setLookAtOffset(); GLCode.setCameraOffset(); - lookAtOffsetAnimation.running = true; - cameraOffsetAnimation.running = true; - + lookAtOffsetAnimation.restart(); + cameraOffsetAnimation.restart(); } //! [1] //! [0] |