Exemple #1
0
void Vizzer::renderCamera(ApplicationData &app, const Cameraf &c, const vec3f &color)
{
    const float axisLength = 0.15f;
    const float radius = 0.003f;

    const vec3f eye = c.getEye();
    const vec3f look = c.getLook() * axisLength;
    const vec3f right = c.getRight() * axisLength;
    const vec3f up = c.getUp() * axisLength;
    assets.renderSphere(camera.getCameraPerspective(), eye, radius * 1.5f, math::lerp(color, vec3f(1.0f, 1.0f, 1.0f), 0.25f));
    assets.renderCylinder(camera.getCameraPerspective(), eye, eye + look, radius, math::lerp(color, vec3f(0.0f, 0.0f, 1.0f), 0.25f));
    assets.renderCylinder(camera.getCameraPerspective(), eye, eye + right, radius, math::lerp(color, vec3f(0.0f, 1.0f, 0.0f), 0.25f));
    assets.renderCylinder(camera.getCameraPerspective(), eye, eye + up, radius, math::lerp(color, vec3f(1.0f, 0.0f, 0.0f), 0.25f));
}
    void PBRTPreamble(const Cameraf &camera, UINT resolution, bool externalCamera, const string &externalLookAt)
    {
        ofstream file(PBRTFilename());

        //
        //http://www-users.cselabs.umn.edu/classes/Spring-2012/csci5108/fileformat.pdf
        //

        file << "Film \"image\"" << endl;
        file << "  \"integer xresolution\" [" << resolution << "] \"integer yresolution\" [" << resolution << "]" << endl;
        
        file << "  \"string filename\" [\"./scene.exr\"]" << endl;

        file << "Scale -1 1 1" << endl;

        if (externalCamera)
          file << "Include \"./camera.pbrt\"" << endl;
        else if (externalLookAt.size() > 0)
            file << externalLookAt << endl;
        else
          file << "LookAt " << camera.getEye() << ' ' << (camera.getEye() + camera.getLook()) << ' ' << camera.getUp() << endl;

        file << "Camera \"perspective\" \"float fov\" [60]" << endl;

        file << "SurfaceIntegrator \"whitted\"" << endl;

        file << " Sampler \"lowdiscrepancy\" \"integer pixelsamples\" [" << synthParams().PBRTSamples << "]" << endl;

        file << "WorldBegin" << endl;

        //
        // nsamples for an infinite light source does nothing. Light sampling is deterministic given the u-v sample values provided by the Sampler.
        //

        //file << "LightSource \"infinite\" \"string mapname\" [\"lightMaps/pisa_latlong.exr\"]" << endl;
        //file << "  \"integer nsamples\" [1]" << endl;

        file << "AttributeBegin" << endl;
        file << "Rotate 110 0 0 1" << endl;
        file << "LightSource \"infinite\" \"string mapname\" [\"lightMaps/skylight-surreal.exr\"]" << endl;
        file << "  \"integer nsamples\" [1]" << endl;
        file << "AttributeEnd" << endl;

        file << "AttributeBegin" << endl;
        file << "Rotate 110 0 0 1" << endl;
        file << "LightSource \"infinite\" \"string mapname\" [\"lightMaps/skylight-surreal.exr\"]" << endl;
        file << "  \"integer nsamples\" [1]" << endl;
        file << "AttributeEnd" << endl;

        file << "AttributeBegin" << endl;
        file << "Rotate 180 1 0 0" << endl;
        file << "LightSource \"infinite\" \"string mapname\" [\"lightMaps/skylight-blue.exr\"]" << endl;
        file << "  \"integer nsamples\" [1]" << endl;
        file << "AttributeEnd" << endl;

        file << "AttributeBegin" << endl;
        file << "Rotate 190 0 0 1" << endl;
        file << "LightSource \"infinite\" \"string mapname\" [\"lightMaps/skylight-pollution.exr\"]" << endl;
        file << "  \"integer nsamples\" [1]" << endl;
        file << "AttributeEnd" << endl;
    }