#include "common.h" #include "Material.h" #include "Texture.h" #include "glInterface.h" #include "RenderState.h" namespace CHCDemoEngine { RgbaColor RandomColor(float a, float b) { return RgbaColor(a + Random(b), a + Random(b), a + Random(b), 1); } void Material::InitMaterial() { mTexture = NULL; mAlphaTestEnabled = false; mAmbientColor = RgbaColor(0.2f, 0.2f, 0.2f, 1.0f); mDiffuseColor = RgbaColor(1.0f, 1.0f, 1.0f, 1.0f); //mSpecularColor = RgbaColor(.0f, .0f, .0f, 1.0f); mSpecularColor = RgbaColor(0.5f, 0.5f, 0.5f, 1.0f); mEmmisiveColor = RgbaColor(.0f, .0f, .0f, 1.0f); } Material::Material() { InitMaterial(); } Material::Material(const RgbaColor &color): mDiffuseColor(color), mAmbientColor(color), mSpecularColor(0, 0, 0, 1), mTexture(NULL) { } Material RandomMaterial() { float a = 0.1f; float b = 0.9f; Material m; m.mDiffuseColor = RandomColor(a, b); return m; } //void Material::Render(RenderState *state) void Material::Render(RenderState *state) { state->SetState(mTexture != NULL, mAlphaTestEnabled); if (mTexture) mTexture->Bind(); else glBindTexture(GL_TEXTURE_2D, 0); glMaterialfv(GL_FRONT, GL_AMBIENT, (float *)&mAmbientColor.r); glMaterialfv(GL_FRONT, GL_DIFFUSE, (float *)&mDiffuseColor.r); glMaterialfv(GL_FRONT, GL_EMISSION, (float *)&mEmmisiveColor.r); glMaterialfv(GL_FRONT, GL_SPECULAR, (float *)&mSpecularColor.r); } }