Rev 510 | Rev 601 | 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