Commit a694ac423033ba8a50099d04b43941c5ca7d8285

Authored by György Straub
1 parent efa2b59b

Fixed the rotation interaction in the Mesh Visual example.

Change-Id: I4d4c8df78c78281e565ec9932df43a598e68a439
Signed-off-by: György Straub <g.straub@partner.samsung.com>
examples/mesh-visual/mesh-visual-example.cpp
... ... @@ -9,7 +9,6 @@ namespace
9 9 struct Model
10 10 {
11 11 Control control; // Control housing the mesh visual of the model.
12   - Vector2 rotation; // Keeps track of rotation about x and y axis for manual rotation.
13 12 Animation rotationAnimation; // Automatically rotates when left alone.
14 13 };
15 14  
... ... @@ -156,8 +155,6 @@ public:
156 155  
157 156 //Store model information in corresponding structs.
158 157 mModels[i].control = control;
159   - mModels[i].rotation.x = 0.0f;
160   - mModels[i].rotation.y = 0.0f;
161 158 mModels[i].rotationAnimation = rotationAnimation;
162 159 }
163 160  
... ... @@ -403,11 +400,10 @@ public:
403 400 actor.GetProperty(actor.GetPropertyIndex("Model")).Get(mSelectedModelIndex);
404 401  
405 402 //Pause current animation, as the touch gesture will be used to manually rotate the model
406   - mModels[mSelectedModelIndex].rotationAnimation.Pause();
  403 + mModels[mSelectedModelIndex].rotationAnimation.Stop();
407 404  
408 405 //Store start points.
409   - mPanStart = touch.GetScreenPosition(0);
410   - mRotationStart = mModels[mSelectedModelIndex].rotation;
  406 + mLastTouchPosition = touch.GetScreenPosition(0);
411 407 }
412 408  
413 409 break;
... ... @@ -420,14 +416,15 @@ public:
420 416 case MODEL_TAG: //Rotate model
421 417 {
422 418 //Calculate displacement and corresponding rotation.
423   - Vector2 displacement = touch.GetScreenPosition(0) - mPanStart;
424   - mModels[mSelectedModelIndex].rotation = Vector2(mRotationStart.x - displacement.y / Y_ROTATION_DISPLACEMENT_FACTOR, // Y displacement rotates around X axis
425   - mRotationStart.y + displacement.x / X_ROTATION_DISPLACEMENT_FACTOR); // X displacement rotates around Y axis
426   - Quaternion rotation = Quaternion(Radian(mModels[mSelectedModelIndex].rotation.x), Vector3::XAXIS) *
427   - Quaternion(Radian(mModels[mSelectedModelIndex].rotation.y), Vector3::YAXIS);
  419 + const Vector2 touchPosition = touch.GetScreenPosition(0);
  420 + const Vector2 displacement = touchPosition - mLastTouchPosition;
  421 + mLastTouchPosition = touchPosition;
  422 +
  423 + const Quaternion q(Radian(displacement.y / -Y_ROTATION_DISPLACEMENT_FACTOR), Radian(displacement.x / X_ROTATION_DISPLACEMENT_FACTOR), Radian(0.f));
  424 + const Quaternion q0 = mModels[mSelectedModelIndex].control.GetProperty(Actor::Property::ORIENTATION).Get<Quaternion>();
428 425  
429 426 //Apply rotation.
430   - mModels[mSelectedModelIndex].control.SetProperty(Actor::Property::ORIENTATION, rotation);
  427 + mModels[mSelectedModelIndex].control.SetProperty(Actor::Property::ORIENTATION, q * q0);
431 428  
432 429 break;
433 430 }
... ... @@ -584,7 +581,7 @@ private:
584 581 Control mLightSource;
585 582  
586 583 //Used to detect panning to rotate the selected model.
587   - Vector2 mPanStart;
  584 + Vector2 mLastTouchPosition;
588 585 Vector2 mRotationStart;
589 586  
590 587 int mModelIndex; //Index of model to load.
... ... @@ -598,7 +595,7 @@ private:
598 595  
599 596 int DALI_EXPORT_API main(int argc, char** argv)
600 597 {
601   - Application application = Application::New(&argc, &argv);
  598 + Application application = Application::New(&argc, &argv, DEMO_THEME_PATH);
602 599 MeshVisualController test(application);
603 600 application.MainLoop();
604 601 return 0;
... ...