Viewer::Viewer(QWidget* parent) : QMainWindow(parent), resources_(ResourceManager::Create()), default_scene_(resources_->MakeScene("default_scene")), viewport_(new Viewport(resources_, default_scene_, this)) { // Add a couple lights LightNode* light0 = default_scene_->MakeLight(default_scene_->Root()); light0->SetDirection(QVector3D(1, 1, -1)); light0->SetLightType(LightType::kDirectional); light0->SetAmbient(0.05); // Add a camera to the scene CameraNode* camera = default_scene_->MakeCamera(default_scene_->Root()); // Set the camera perspective projection parameters, and point it somewhere. const QVector3D eye(5, 5, -10); const QVector3D look_at(0, 0, 0); const QVector3D up(0, 0, -1); camera->LookAt(eye, look_at, up); camera->SetProjectionParams(CameraNode::kPerspective, 50, 0.1, 5000); // Assign the camera to the viewport viewport_->SetCamera(camera); // Add a renderer widget stack renderer_widget_stack_ = new RendererWidgetStack(this); // Whenever a renderer is added to the viewport, add its widget to // the renderer widget stack and a menu entry. connect(viewport_, &Viewport::RendererAdded, this, &Viewer::OnRendererAdded); // Similarly, whenever an input handler is added to the viewport, add // a menu entry. connect(viewport_, &Viewport::InputHandlerAdded, this, &Viewer::OnInputHandlerAdded); connect(viewport_, &Viewport::InputHandlerActivated, this, &Viewer::OnInputHandlerActivated); setCentralWidget(viewport_); addDockWidget(Qt::LeftDockWidgetArea, renderer_widget_stack_); // Add the input controls dock widget input_handler_widget_ = new InputHandlerWidgetStack(viewport_, this); addDockWidget(Qt::LeftDockWidgetArea, input_handler_widget_); CreateMenus(); resize(800, 600); }