nuclear@0: /* nuclear@0: Simple introductory ray tracer nuclear@0: Copyright (C) 2012 John Tsiombikas nuclear@0: nuclear@0: This program is free software: you can redistribute it and/or modify nuclear@0: it under the terms of the GNU General Public License as published by nuclear@0: the Free Software Foundation, either version 3 of the License, or nuclear@0: (at your option) any later version. nuclear@0: nuclear@0: This program is distributed in the hope that it will be useful, nuclear@0: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@0: GNU General Public License for more details. nuclear@0: nuclear@0: You should have received a copy of the GNU General Public License nuclear@0: along with this program. If not, see . nuclear@0: */ nuclear@0: #ifndef MATERIAL_H_ nuclear@0: #define MATERIAL_H_ nuclear@0: nuclear@0: #include "vmath/vmath.h" nuclear@0: nuclear@0: // colors are simply RGB vectors nuclear@0: typedef Vector3 Color; nuclear@0: nuclear@0: class Texture; nuclear@0: nuclear@0: class Material { nuclear@0: public: nuclear@0: // phong model parameters nuclear@0: Color diffuse; // amount of diffuse light scattering (per color channel) nuclear@0: Color specular; // amount of specular light reflection (per color channel) nuclear@0: float shininess; // higher shininess values -> more focused specular refl. nuclear@0: nuclear@0: Color emission; // emissive light nuclear@0: nuclear@0: // additional raytracing parameters nuclear@0: float reflectivity; // range [0, 1] nuclear@0: float transparency; // range [0, 1] nuclear@0: float ior; // index of refraction nuclear@0: nuclear@0: Texture *tex; nuclear@0: Vector4 mega_rect; // tex coords for the megatexture nuclear@0: nuclear@0: Material(); nuclear@0: Material(const Color &dcol, const Color &scol = Color(1.0, 1.0, 1.0), float spow = 60.0, nuclear@0: float refl = 0.0, float refr = 0.0, float ior = 1.0); nuclear@0: }; nuclear@0: nuclear@0: #endif // MATERIAL_H_