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; }
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); }