//In this tutorial, you will change the previous Hello World application to //further your understanding of motion models. Previously you learned how to place a //camera in a scene and move the camera position via mouse and keyboard inputs. //Now we will reverse this situation and move the object while the camera is static. #include <dtABC/application.h> #include <dtCore/refptr.h> #include <dtCore/object.h> #include <dtCore/orbitmotionmodel.h> #include <dtCore/deltawin.h> #include <dtCore/transform.h> #include<dtUtil/datapathutils.h> class HelloWorldApp : public dtABC::Application { public: HelloWorldApp(const std::string& configFilename); // Override this function to setup your scene. virtual void Config(); protected: // Destructors for subclasses of dtCore::Base must have a protected // destructor. Otherwise use of RefPtrs will cause some serious // problems if the objects are allocated on the stack. virtual ~HelloWorldApp(); private: // dtCore::RefPtr is a template for a smart pointer that takes // care of reference counting for objects allocated on the heap. // It is good practice to store all objects that derive from // dtCore::Base inside a RefPtr. dtCore::RefPtr<dtCore::Object> mTextObject; dtCore::RefPtr<dtCore::OrbitMotionModel> mMotionModel; }; HelloWorldApp::HelloWorldApp(const std::string& configFilename) : dtABC::Application(configFilename) { } HelloWorldApp::~HelloWorldApp() { } void HelloWorldApp::Config() { // Call the parent class, in case something important is happening there Application::Config(); GetWindow()->SetWindowTitle("HelloWorldApp2"); // Adjust the Camera position by instantiating a transform object to // store the camera position and attitude. dtCore::Transform camPosition(0.f, -100.f, 10.f, 0.f, 0.f, 0.f); GetCamera()->SetTransform(camPosition); // Setting a motion model for the camera mMotionModel = new dtCore::OrbitMotionModel(GetKeyboard(), GetMouse()); // Allocate a dtCore::Object. This class will be your basic container // for 3D meshes. mTextObject = new dtCore::Object("Text"); // Load the model file, in this case an OpenFlight model (.flt) mTextObject->LoadFile("house1.ive"); // Setting the camera as a target for the motion model. The camera will // will be static, and the camera will move the object using the right // clicked mouse. mMotionModel->SetTarget(mTextObject); // Add the Object to the scene. Since the object is a RefPtr, we must // pull the internal point out to pass it to the Scene. AddDrawable(mTextObject.get()); } int main(int arc, char **argv) { // Setup the data file search paths for the config file and the models files. // This is best done in main prior to configuring app. That way the paths // are ensured to be correct when loading data. dtUtil::SetDataFilePathList( "..;" + dtUtil::GetDeltaDataPathList() + ";" + dtUtil::GetDeltaRootPath() + "/examples/data/models;"); //Instantiate the application and look for the config file dtCore::RefPtr<HelloWorldApp> app = new HelloWorldApp("config.xml"); app->Config(); //configuring the application app->Run(); // running the simulation loop return 0; }