7 #include "imstkCamera.h" 8 #include "imstkCameraController.h" 9 #include "imstkDeviceManager.h" 10 #include "imstkDeviceManagerFactory.h" 11 #include "imstkKeyboardDeviceClient.h" 12 #include "imstkKeyboardSceneControl.h" 13 #include "imstkMeshIO.h" 14 #include "imstkMouseDeviceClient.h" 15 #include "imstkMouseSceneControl.h" 16 #include "imstkPlane.h" 17 #include "imstkScene.h" 18 #include "imstkSceneManager.h" 19 #include "imstkSceneObject.h" 20 #include "imstkSimulationManager.h" 21 #include "imstkSimulationUtils.h" 22 #include "imstkSpotLight.h" 23 #include "imstkSurfaceMesh.h" 24 #include "imstkVTKViewer.h" 26 using namespace imstk;
41 auto scene = std::make_shared<Scene>(
"CameraController");
45 std::shared_ptr<DeviceClient> deviceClient = hapticManager->makeDeviceClient();
48 auto mesh = MeshIO::read<SurfaceMesh>(iMSTK_DATA_ROOT
"/asianDragon/asianDragon.obj");
49 mesh->scale(0.01, Geometry::TransformType::ApplyToData);
50 auto meshObj = std::make_shared<SceneObject>(
"MeshObj");
51 meshObj->setVisualGeometry(mesh);
52 scene->addSceneObject(meshObj);
54 auto planeObj = std::make_shared<SceneObject>(
"Plane");
55 auto plane = std::make_shared<Plane>(Vec3d(0.0, -0.05, 0.0));
57 planeObj->setVisualGeometry(plane);
58 scene->addSceneObject(planeObj);
61 scene->getActiveCamera()->setPosition(Vec3d(0.0, 0.0, 1.0));
64 auto light = std::make_shared<SpotLight>();
65 light->setFocalPoint(Vec3d(0.0, 0.0, 0.0));
66 light->setPosition(Vec3d(0.0, 10.0, 0.0));
67 light->setIntensity(1.0);
68 light->setSpotAngle(10.0);
71 light->setAttenuationValues(50.0, 0.0, 0.0);
72 scene->addLight(
"light0", light);
77 auto viewer = std::make_shared<VTKViewer>();
78 viewer->setActiveScene(scene);
81 auto sceneManager = std::make_shared<SceneManager>();
82 sceneManager->setActiveScene(scene);
84 auto driver = std::make_shared<SimulationManager>();
85 driver->addModule(hapticManager);
86 driver->addModule(viewer);
87 driver->addModule(sceneManager);
88 driver->setDesiredDt(0.001);
91 auto camController = std::make_shared<CameraController>();
92 camController->setCamera(scene->getActiveCamera());
93 camController->setDevice(deviceClient);
94 scene->addControl(camController);
97 std::shared_ptr<Entity> mouseAndKeyControls =
98 SimulationUtils::createDefaultSceneControl(driver);
99 scene->addSceneObject(mouseAndKeyControls);
102 connect<ButtonEvent>(deviceClient, &DeviceClient::buttonStateChanged,
105 if (e->m_buttonState == BUTTON_PRESSED)
107 if (e->m_button == 0)
109 light->setSpotAngle(light->getSpotAngle() + 5.0);
111 else if (e->m_button == 1)
113 light->setSpotAngle(light->getSpotAngle() - 5.0);
119 connect<Event>(sceneManager, &SceneManager::postUpdate,
122 const Vec3d pos = camController->getPosition();
123 const Quatd orientation = camController->getOrientation();
125 light->setPosition(pos);
126 light->setFocalPoint(pos - orientation.toRotationMatrix().col(2));
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
static std::shared_ptr< DeviceManager > makeDeviceManager()
Attempts to create a new DeviceManager by whichever is default If multiple haptic managers are built ...
static LoggerG3 & startLogger()
Starts logger with default sinks, use getInstance to create a logger with no sinks.