Subversion Repositories gelsvn

Rev

Rev 595 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* ----------------------------------------------------------------------- *
 * This file is part of GEL, http://www.imm.dtu.dk/GEL
 * Copyright (C) the authors and DTU Informatics
 * For license and list of authors, see ../../doc/intro.pdf
 * ----------------------------------------------------------------------- */

/**
 * @file Material.h
 * @brief Contains a simple struct for OpenGL'ish materials.
 */

#ifndef __GEOMETRY_MATERIAL_H__
#define __GEOMETRY_MATERIAL_H__

#include <string>
#include <vector>
#include "../CGLA/Vec3f.h"
#include "../CGLA/Vec3i.h"

namespace Geometry
{
    /// Simple material definitions.
    struct Material
    {
        /// Name of material
        std::string name;
        
        /// Diffuse reflection
        CGLA::Vec3f diffuse;                    
        
        /// Ambient reflection
        CGLA::Vec3f ambient;
        
        /// Specular reflection
        CGLA::Vec3f specular;           
        
        /// Specular exponent
        float shininess;                        
        
        /// Index of refraction in the inverted normal direction ("inside")
        float ior_in;
        
        /// Index of refraction in the normal direction ("outside")
        float ior_out;
        
        /// Transmission filter
        CGLA::Vec3f transmission;
        
        /** Illumination model
         0 - Color
         1 - Color and ambient
         2 - Color and ambient and highlight
         3 - Reflection
         4 - Reflection and refraction
         Refer to the MTL format specification for more models. 
         Only numbers from 0 to 10 have a specific meaning. */
        int illum;
        
        bool has_texture;
        std::string tex_path, tex_name;
        int tex_id;
        
        Material():     name("default"),
        tex_path(""), tex_name(""), tex_id(-1) 
        {
            ior_in = 1.5f;
            ior_out = 1.0f;
            shininess = 0.0f;
            diffuse[0] = 0.8f;
            diffuse[1] = 0.8f;
            diffuse[2] = 0.8f;
            ambient[0] = 0.2f;
            ambient[1] = 0.2f;
            ambient[2] = 0.2f;
            specular[0] = 0.0f;
            specular[1] = 0.0f;
            specular[2] = 0.0f;
            transmission[0] = 0.0f;
            transmission[1] = 0.0f;
            transmission[2] = 0.0f;
            illum = 2;
        }
    };
}

#endif