2020-03-26 22:57:08 +01:00
|
|
|
#include <opengl-playground/material.hpp>
|
|
|
|
|
2020-04-02 00:55:18 +02:00
|
|
|
std::ostream &operator<<(std::ostream &os, glm::vec3 const &vec3)
|
|
|
|
{
|
|
|
|
return os << "(" << vec3.r << "|" << vec3.g << "|" << vec3.b << ")";
|
|
|
|
}
|
2020-03-26 22:57:08 +01:00
|
|
|
|
2020-04-02 00:55:18 +02:00
|
|
|
std::ostream &operator<<(std::ostream &os, Material const &material)
|
|
|
|
{
|
|
|
|
return os << "Diffuse Color: " << material.diff_color << ", "
|
|
|
|
<< "Ambient Color: " << material.ambient_color << ", "
|
|
|
|
<< "Specular Color: " << material.specular_color << ", "
|
|
|
|
<< "Texture counts (diff, amb, spec): " << material.diffuse_textures.size()
|
|
|
|
<< ", " << material.ambient_textures.size() << ", " << material.specular_textures.size();
|
|
|
|
}
|
2020-03-26 22:57:08 +01:00
|
|
|
|
|
|
|
Material::Material()
|
|
|
|
{
|
|
|
|
shininess_strength = 0.0f;
|
|
|
|
shininess = 1.0f;
|
|
|
|
this->setDiffuseColor(glm::vec3(0.0f));
|
|
|
|
this->setAmbientColor(glm::vec3(0.0f));
|
|
|
|
this->setSpecularColor(glm::vec3(0.0f));
|
|
|
|
}
|
|
|
|
|
|
|
|
Material::Material(const glm::vec3 &diff_color, const glm::vec3 &ambient_color, const glm::vec3 &specular_color) : Material()
|
|
|
|
{
|
|
|
|
this->setDiffuseColor(diff_color);
|
|
|
|
this->setAmbientColor(ambient_color);
|
|
|
|
this->setSpecularColor(specular_color);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::setSpecularColor(const glm::vec3 &color)
|
|
|
|
{
|
|
|
|
this->specular_color = color;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::setAmbientColor(const glm::vec3 &color)
|
|
|
|
{
|
|
|
|
this->ambient_color = color;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::setDiffuseColor(const glm::vec3 &color)
|
|
|
|
{
|
|
|
|
this->diff_color = color;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::pushSpecularTexture(std::shared_ptr<OpenGlTexture> texture)
|
|
|
|
{
|
|
|
|
this->specular_textures.push_back(texture);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::pushAmbientTexture(std::shared_ptr<OpenGlTexture> texture)
|
|
|
|
{
|
|
|
|
this->ambient_textures.push_back(texture);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::pushDiffuseTexture(std::shared_ptr<OpenGlTexture> texture)
|
|
|
|
{
|
|
|
|
this->diffuse_textures.push_back(texture);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::pushSpecularTexture(const std::vector<std::shared_ptr<OpenGlTexture>> &textures)
|
|
|
|
{
|
|
|
|
this->specular_textures.insert(this->specular_textures.end(), textures.begin(), textures.end());
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::pushAmbientTexture(const std::vector<std::shared_ptr<OpenGlTexture>> &textures)
|
|
|
|
{
|
|
|
|
this->ambient_textures.insert(this->ambient_textures.end(), textures.begin(), textures.end());
|
|
|
|
}
|
|
|
|
|
|
|
|
void Material::pushDiffuseTexture(const std::vector<std::shared_ptr<OpenGlTexture>> &textures)
|
|
|
|
{
|
|
|
|
this->diffuse_textures.insert(this->diffuse_textures.end(), textures.begin(), textures.end());
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::vector<std::shared_ptr<OpenGlTexture>> &Material::getSpecularTextures()
|
|
|
|
{
|
|
|
|
return this->specular_textures;
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::vector<std::shared_ptr<OpenGlTexture>> &Material::getAmbientTextures()
|
|
|
|
{
|
|
|
|
return this->ambient_textures;
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::vector<std::shared_ptr<OpenGlTexture>> &Material::getDiffuseTextures()
|
|
|
|
{
|
|
|
|
return this->diffuse_textures;
|
|
|
|
}
|
|
|
|
|
|
|
|
const glm::vec3 &Material::getDiffuseColor()
|
|
|
|
{
|
|
|
|
return this->diff_color;
|
|
|
|
}
|
|
|
|
|
|
|
|
const glm::vec3 &Material::getAmbientColor()
|
|
|
|
{
|
|
|
|
return this->ambient_color;
|
|
|
|
}
|
|
|
|
|
|
|
|
const glm::vec3 &Material::getSpecularColor()
|
|
|
|
{
|
|
|
|
return this->specular_color;
|
|
|
|
}
|
|
|
|
|