Beispiel #1
0
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);
}