From 5d4e993e485ae3432eabb45caf4e4d43c9bc54e6 Mon Sep 17 00:00:00 2001 From: Evan Goers Date: Tue, 24 Jan 2012 06:44:19 +0000 Subject: Added a 'specular' material parameter. Defaults to 'color' values. Tweaked lighting a bit. --- src/model/material.cc | 20 ++++++++++++++++++++ src/model/material.h | 6 ++++++ 2 files changed, 26 insertions(+) (limited to 'src/model') diff --git a/src/model/material.cc b/src/model/material.cc index b76be02..ff9a257 100644 --- a/src/model/material.cc +++ b/src/model/material.cc @@ -21,6 +21,7 @@ Material::Registry Material::material_registry; Material::Material(const std::string &name) : material_name(name), material_color(1.0f) , + material_specular(1.0f) , material_size(64.0f, 64.0f) { aux::to_lowercase(material_name); @@ -90,6 +91,11 @@ void Material::set_color(const math::Color &color) //material_color.a = 1.0f; } +void Material::set_specular(const math::Color &color) +{ + material_specular.assign(color); +} + void Material::set_texture(const std::string &texture) { if (texture.size()) { @@ -227,6 +233,20 @@ void Material::load_shader(const std::string &shadername) a = 1.0f; } material->set_color(math::Color(r, g, b, a)); + // set specular too, preserving the old behavior + material->set_specular(math::Color(r, g, b, a)); + } + } else if (firstword.compare("specular") == 0) { + if (linestream >> r >> g >> b) { + if (math::max(r, math::max(g, b)) > 1.0f) { + r /= 255.0f; + g /= 255.0f; + b /= 255.0f; + } + if (!(linestream >> a)) { + a = 1.0f; + } + material->set_specular(math::Color(r, g, b, a)); } } else if (firstword.compare("engine") == 0) { material->set_flags(Engine); diff --git a/src/model/material.h b/src/model/material.h index b128954..2c66aae 100644 --- a/src/model/material.h +++ b/src/model/material.h @@ -45,6 +45,10 @@ public: return material_color; } + inline const math::Color &specular() const { + return material_specular; + } + inline const unsigned int flags() const { return material_flags; } @@ -90,6 +94,7 @@ public: /* ---- mutators ------------------------------------------- */ void set_color(const math::Color &color); + void set_specular(const math::Color &specular); /** * @brief set the material texture name */ @@ -157,6 +162,7 @@ private: std::string material_name; math::Color material_color; + math::Color material_specular; unsigned int material_flags; std::string material_texture; size_t material_texture_id; -- cgit v1.2.3