X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fmodel3d-view%2Fmodel3d-view-example.cpp;h=d8d0316198865c570fd057668ec5d53cedb85563;hb=1b19fd140ff139b5854a1a62447faf31b175d8f6;hp=b2b4b57582a3887aa1b8814fea499109a0081a91;hpb=a70ecbcb1da52ba43a31e6412d7e476e74338a2e;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/model3d-view/model3d-view-example.cpp b/examples/model3d-view/model3d-view-example.cpp index b2b4b57..d8d0316 100644 --- a/examples/model3d-view/model3d-view-example.cpp +++ b/examples/model3d-view/model3d-view-example.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,23 +24,21 @@ namespace { const int MODEL_NUMBER(3); -const char * const MODEL_FILE[] = { - DEMO_MODEL_DIR "Dino.obj", - DEMO_MODEL_DIR "ToyRobot-Metal.obj", - DEMO_MODEL_DIR "Toyrobot-Plastic.obj" -}; +const char* const MODEL_FILE[] = { + DEMO_MODEL_DIR "Dino.obj", + DEMO_MODEL_DIR "ToyRobot-Metal.obj", + DEMO_MODEL_DIR "Toyrobot-Plastic.obj"}; -const char * const MATERIAL_FILE[] = { - DEMO_MODEL_DIR "Dino.mtl", - DEMO_MODEL_DIR "ToyRobot-Metal.mtl", - DEMO_MODEL_DIR "Toyrobot-Plastic.mtl" -}; +const char* const MATERIAL_FILE[] = { + DEMO_MODEL_DIR "Dino.mtl", + DEMO_MODEL_DIR "ToyRobot-Metal.mtl", + DEMO_MODEL_DIR "Toyrobot-Plastic.mtl"}; -const char * const IMAGE_PATH( DEMO_IMAGE_DIR "" ); +const char* const IMAGE_PATH(DEMO_IMAGE_DIR ""); -const char * BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-1.jpg"); +const char* BACKGROUND_IMAGE(DEMO_IMAGE_DIR "background-1.jpg"); -} +} // namespace /* * This example shows how to create and display a model3d-view control. @@ -55,12 +53,20 @@ const char * BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-1.jpg"); class Model3dViewController : public ConnectionTracker { public: - - Model3dViewController( Application& application ) - : mApplication( application ) + Model3dViewController(Application& application) + : mApplication(application), + mModelCounter(0), + mModel3dView(), + mButtonLayer(), + mTapDetector(), + mIlluminationShader(Model3dView::DIFFUSE), + mRotationAnimation(), + mLightAnimation(), + mPlaying(false), + mScaled(false) { // Connect to the Application's Init signal - mApplication.InitSignal().Connect( this, &Model3dViewController::Create ); + mApplication.InitSignal().Connect(this, &Model3dViewController::Create); } ~Model3dViewController() @@ -69,123 +75,116 @@ public: } // The Init signal is received once (only) during the Application lifetime - void Create( Application& application ) + void Create(Application& application) { - // Get a handle to the stage - Stage stage = Stage::GetCurrent(); - Vector2 screenSize = stage.GetSize(); + // Get a handle to the window + Window window = application.GetWindow(); + Vector2 screenSize = window.GetSize(); //Add background Toolkit::ImageView backView = Toolkit::ImageView::New(BACKGROUND_IMAGE); - backView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - stage.Add(backView); - - //Add 3D model control - m3DLayer = Layer::New(); - stage.GetRootLayer().Add(m3DLayer); - - //3D models require 3D based rendering method, so it can use depth buffer, etc. - m3DLayer.SetBehavior(Layer::LAYER_3D); - m3DLayer.SetParentOrigin( ParentOrigin::CENTER ); - m3DLayer.SetAnchorPoint( AnchorPoint::CENTER ); + backView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + backView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + window.Add(backView); mModelCounter = 0; - mModel3dView = Model3dView::New( MODEL_FILE[0], MATERIAL_FILE[0], IMAGE_PATH ); - mModel3dView.SetParentOrigin( ParentOrigin::CENTER ); - mModel3dView.SetAnchorPoint( AnchorPoint::CENTER ); - mModel3dView.SetName( "model3dViewControl" ); + mModel3dView = Model3dView::New(MODEL_FILE[0], MATERIAL_FILE[0], IMAGE_PATH); + mModel3dView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + mModel3dView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + mModel3dView.SetProperty(Dali::Actor::Property::NAME, "model3dViewControl"); mModel3dView.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS); - mModel3dView.SetSize(screenSize); + mModel3dView.SetProperty(Actor::Property::SIZE, screenSize); - mModel3dView.SetProperty(Model3dView::Property::LIGHT_POSITION, Vector3(5,10.,0)); + mModel3dView.SetProperty(Model3dView::Property::LIGHT_POSITION, Vector3(5, 10., 0)); - m3DLayer.Add( mModel3dView ); + backView.Add(mModel3dView); mIlluminationShader = Model3dView::IlluminationType(mModel3dView.GetProperty(Model3dView::Property::ILLUMINATION_TYPE)); mButtonLayer = Layer::New(); - mButtonLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); - mButtonLayer.SetParentOrigin( ParentOrigin::CENTER ); - mButtonLayer.SetAnchorPoint( AnchorPoint::CENTER ); - stage.GetRootLayer().Add(mButtonLayer); + mButtonLayer.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + mButtonLayer.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + mButtonLayer.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + window.Add(mButtonLayer); // Create button for model changing Toolkit::PushButton editButton = Toolkit::PushButton::New(); - editButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); - editButton.ClickedSignal().Connect( this, &Model3dViewController::OnChangeModelClicked); - editButton.SetParentOrigin( ParentOrigin::TOP_LEFT ); - editButton.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - editButton.SetLabelText( "Change Model" ); - mButtonLayer.Add( editButton ); + editButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS); + editButton.ClickedSignal().Connect(this, &Model3dViewController::OnChangeModelClicked); + editButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); + editButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + editButton.SetProperty(Toolkit::Button::Property::LABEL, "Change Model"); + mButtonLayer.Add(editButton); // Create button for shader changing editButton = Toolkit::PushButton::New(); - editButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); - editButton.ClickedSignal().Connect( this, &Model3dViewController::OnChangeLightingClicked); - editButton.SetParentOrigin( ParentOrigin::TOP_RIGHT ); - editButton.SetAnchorPoint( AnchorPoint::TOP_RIGHT ); - editButton.SetLabelText( "Change Shader" ); - mButtonLayer.Add( editButton ); + editButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS); + editButton.ClickedSignal().Connect(this, &Model3dViewController::OnChangeLightingClicked); + editButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT); + editButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_RIGHT); + editButton.SetProperty(Toolkit::Button::Property::LABEL, "Change Shader"); + mButtonLayer.Add(editButton); // Create button for pause/resume animation editButton = Toolkit::PushButton::New(); - editButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); - editButton.ClickedSignal().Connect( this, &Model3dViewController::OnPauseAnimationsClicked); - editButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - editButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - editButton.SetLabelText( "Pause Animations" ); - mButtonLayer.Add( editButton ); + editButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS); + editButton.ClickedSignal().Connect(this, &Model3dViewController::OnPauseAnimationsClicked); + editButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER); + editButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER); + editButton.SetProperty(Toolkit::Button::Property::LABEL, "Pause Animations"); + mButtonLayer.Add(editButton); //Create animations mLightAnimation = Animation::New(6.f); - mLightAnimation.AnimateTo(Property(mModel3dView, Model3dView::Property::LIGHT_POSITION), Vector3(-5,10.0,0), TimePeriod( 0.0f, 3.0f )); - mLightAnimation.AnimateTo(Property(mModel3dView, Model3dView::Property::LIGHT_POSITION), Vector3(5,10.0,0), TimePeriod( 3.0f, 3.0f )); + mLightAnimation.AnimateTo(Property(mModel3dView, Model3dView::Property::LIGHT_POSITION), Vector3(-5, 10.0, 0), TimePeriod(0.0f, 3.0f)); + mLightAnimation.AnimateTo(Property(mModel3dView, Model3dView::Property::LIGHT_POSITION), Vector3(5, 10.0, 0), TimePeriod(3.0f, 3.0f)); mLightAnimation.SetLooping(true); mLightAnimation.Play(); mRotationAnimation = Animation::New(15.f); - mRotationAnimation.AnimateBy(Property(mModel3dView, Actor::Property::ORIENTATION), Quaternion(Degree(0.f), Degree(360.f), Degree(0.f)) ); + mRotationAnimation.AnimateBy(Property(mModel3dView, Actor::Property::ORIENTATION), Quaternion(Degree(0.f), Degree(360.f), Degree(0.f))); mRotationAnimation.SetLooping(true); mRotationAnimation.Play(); mPlaying = true; - mScaled = false; + mScaled = false; - // Respond to a click anywhere on the stage - stage.KeyEventSignal().Connect(this, &Model3dViewController::OnKeyEvent); + // Respond to a click anywhere on the window + window.KeyEventSignal().Connect(this, &Model3dViewController::OnKeyEvent); //Create a tap gesture detector for zoom - mTapDetector = TapGestureDetector::New( 2 ); + mTapDetector = TapGestureDetector::New(2); mTapDetector.DetectedSignal().Connect(this, &Model3dViewController::OnTap); - mTapDetector.Attach( backView ); + mTapDetector.Attach(backView); } /** * Main Tap event handler */ - void OnTap( Actor actor, const TapGesture& tap ) + void OnTap(Actor actor, const TapGesture& tap) { - if (mScaled) + if(mScaled) { - mModel3dView.SetScale(1.0); - mModel3dView.SetPosition(0,0,0); + mModel3dView.SetProperty(Actor::Property::SCALE, 1.0f); + mModel3dView.SetProperty(Actor::Property::POSITION, Vector3(0, 0, 0)); mScaled = false; } else { - Stage stage = Stage::GetCurrent(); - Vector2 screenSize = stage.GetSize(); + Window window = mApplication.GetWindow(); + Vector2 screenSize = window.GetSize(); - Vector2 position; - position.x = tap.screenPoint.x - screenSize.x * 0.5; - position.y = tap.screenPoint.y - screenSize.y * 0.5; + const Vector2& screenPoint = tap.GetScreenPoint(); + Vector2 position; + position.x = screenPoint.x - screenSize.x * 0.5; + position.y = screenPoint.y - screenSize.y * 0.5; float size = 2.5; - mModel3dView.SetScale(size); - mModel3dView.SetPosition(-position.x * size,-position.y * size, 0); + mModel3dView.SetProperty(Actor::Property::SCALE, size); + mModel3dView.SetProperty(Actor::Property::POSITION, Vector3(-position.x * size, -position.y * size, 0)); mScaled = true; } } @@ -198,8 +197,6 @@ public: mModelCounter = (mModelCounter + 1) % MODEL_NUMBER; mModel3dView.SetProperty(Model3dView::Property::GEOMETRY_URL, MODEL_FILE[mModelCounter]); mModel3dView.SetProperty(Model3dView::Property::MATERIAL_URL, MATERIAL_FILE[mModelCounter]); - mModel3dView.SetProperty(Model3dView::Property::IMAGES_URL, IMAGE_PATH); - return true; } @@ -208,21 +205,21 @@ public: */ bool OnChangeLightingClicked(Toolkit::Button button) { - if( mIlluminationShader == Model3dView::DIFFUSE_WITH_NORMAL_MAP ) + if(mIlluminationShader == Model3dView::DIFFUSE_WITH_NORMAL_MAP) { mModel3dView.SetProperty(Model3dView::Property::ILLUMINATION_TYPE, Model3dView::DIFFUSE_WITH_TEXTURE); mIlluminationShader = Model3dView::IlluminationType(mModel3dView.GetProperty(Model3dView::Property::ILLUMINATION_TYPE)); } - else if( mIlluminationShader == Model3dView::DIFFUSE_WITH_TEXTURE ) + else if(mIlluminationShader == Model3dView::DIFFUSE_WITH_TEXTURE) { mModel3dView.SetProperty(Model3dView::Property::ILLUMINATION_TYPE, Model3dView::DIFFUSE); mIlluminationShader = Model3dView::IlluminationType(mModel3dView.GetProperty(Model3dView::Property::ILLUMINATION_TYPE)); - } - else if( mIlluminationShader == Model3dView::DIFFUSE ) + } + else if(mIlluminationShader == Model3dView::DIFFUSE) { mModel3dView.SetProperty(Model3dView::Property::ILLUMINATION_TYPE, Model3dView::DIFFUSE_WITH_NORMAL_MAP); mIlluminationShader = Model3dView::IlluminationType(mModel3dView.GetProperty(Model3dView::Property::ILLUMINATION_TYPE)); - } + } return true; } @@ -232,7 +229,7 @@ public: */ void PauseAnimations() { - if( mPlaying ) + if(mPlaying) { mRotationAnimation.Pause(); mLightAnimation.Pause(); @@ -263,9 +260,9 @@ public: */ void OnKeyEvent(const KeyEvent& event) { - if(event.state == KeyEvent::Down) + if(event.GetState() == KeyEvent::DOWN) { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) + if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK)) { mApplication.Quit(); } @@ -276,40 +273,28 @@ public: } } - private: - Application& mApplication; + Application& mApplication; - int mModelCounter; + int mModelCounter; Model3dView mModel3dView; - Layer m3DLayer; - Layer mButtonLayer; + Layer mButtonLayer; TapGestureDetector mTapDetector; Model3dView::IlluminationType mIlluminationShader; Animation mRotationAnimation; Animation mLightAnimation; - bool mPlaying; + bool mPlaying; bool mScaled; }; -void RunTest( Application& application ) +int DALI_EXPORT_API main(int argc, char** argv) { - Model3dViewController test( application ); - + Application application = Application::New(&argc, &argv); + Model3dViewController test(application); application.MainLoop(); -} - -// Entry point for Linux & Tizen applications -// -int DALI_EXPORT_API main( int argc, char **argv ) -{ - Application application = Application::New( &argc, &argv ); - - RunTest( application ); - return 0; }