예제 #1
0
bool Viewer::saveScene( const QString & fileName ) const
{
  if ( !fileName.isEmpty() )
  {
    // Saving a scene requires a ViewState with a scene and a camera.
    // DAR FIXME Better would be to use the ViewState of the currently active viewport here.
    DP_ASSERT( m_viewState && m_viewState->getScene() );
    dp::sg::core::CameraSharedPtr viewStateCamera = m_viewState->getCamera();
    if ( ! viewStateCamera )
    {
      dp::sg::core::PerspectiveCameraSharedPtr perspectiveCamera( dp::sg::core::PerspectiveCamera::create() );
      {
        perspectiveCamera->setName("ViewCamera");

        // When creating a new camera, make the scene fit into the viewport.
        if ( m_viewState->getScene()->getRootNode() )
        {
          const dp::math::Sphere3f & bs = m_viewState->getScene()->getRootNode()->getBoundingSphere();
          perspectiveCamera->zoom(bs, dp::math::PI_QUARTER);
        }

        m_viewState->setCamera( perspectiveCamera );
      }
    }

    return dp::sg::io::saveScene( fileName.toStdString(), m_viewState );
  }

  return false;
}
예제 #2
0
int main()
{
    sf::RenderWindow    app(sf::VideoMode(WIDTH, HEIGHT), "Raytracer");

    BasicTracer         tracer;
    BasicScene          scene(&tracer);
    SfmlRenderTarget    renderTarget(WIDTH, HEIGHT);
    PerspectiveCamera   perspectiveCamera(Vector3D(0.0, 50.0, 0.0), Vector3D(0.0, 20.0, 100.0), Vector3D(0.0, -1.0, 0.0));

    buildAndRenderScene(scene, perspectiveCamera, renderTarget);

    while (app.isOpen())
    {
        sf::Event Event;

        while (app.pollEvent(Event))
        {
            if (Event.type == sf::Event::Closed)
                app.close();
        }

        app.clear();
        app.draw(renderTarget);
        app.display();
    }
  
    return (0);
}