Files
Include/EGkMaterial.h
T
Dario Sassi a1e4c312bd Include :
- modifiche per materiali.
2014-04-27 20:11:17 +00:00

88 lines
3.5 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : EGkMaterial.h Data : 23.04.14 Versione : 1.5d7
// Contenuto : Implementazione della classe Material.
//
//
//
// Modifiche : 23.04.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EGkColor.h"
//----------------------- Macro per import/export ----------------------------
#undef EGK_EXPORT
#if defined( I_AM_EGK) // da definirsi solo nella DLL
#define EGK_EXPORT __declspec( dllexport)
#else
#define EGK_EXPORT __declspec( dllimport)
#endif
//-----------------------------------------------------------------------------
const int MAX_SHIN = 128 ;
//-----------------------------------------------------------------------------
class Material
{
public :
Material( void) : m_colAmb( Color()), m_colDiff( Color()), m_colSpec( Color()), m_fShin( 64)
{}
Material( Color colAmb, Color colDiff, Color colSpec, double dShin)
{ Set( colAmb, colDiff, colSpec, dShin) ; }
Material( Color colC)
{ Set( colC) ; }
void Set( void)
{ m_colAmb = Color() ; m_colDiff = Color() ; m_colSpec = Color() ; }
void Set( Color colAmb, Color colDiff, Color colSpec, double dShin)
{ m_colAmb = colAmb ; m_colDiff = colDiff ; m_colSpec = colSpec ; AdjustAlpha() ;
m_fShin = float( dShin) ; AdjustShin() ; }
void Set( Color colC)
{ m_colAmb = colC ; m_colDiff = colC ; m_colSpec = Color( 192, 192, 192) ; AdjustAlpha() ;
m_fShin = 64 ; }
void SetAmbient( Color colAmb)
{ m_colAmb = colAmb ; AdjustAlpha() ; }
void SetDiffuse( Color colDiff)
{ m_colDiff = colDiff ; AdjustAlpha() ; }
void SetSpecular( Color colSpec)
{ m_colSpec = colSpec ; AdjustAlpha() ; }
void SetAlpha( int nAlpha)
{ m_colDiff.SetAlpha( nAlpha) ; AdjustAlpha() ; }
void SetAlpha( double dAlpha)
{ m_colDiff.SetAlpha( dAlpha) ; AdjustAlpha() ; }
void SetShininess( int nShin)
{ m_fShin = float( nShin) ; AdjustShin() ; }
void SetShininess( double dShin)
{ m_fShin = float( dShin) ; AdjustShin() ; }
Color GetAmbient( void) const
{ return m_colAmb ; }
Color GetDiffuse( void) const
{ return m_colDiff ; }
Color GetSpecular( void) const
{ return m_colSpec ; }
float GetAlpha( void) const
{ return m_colDiff.GetAlpha() ; }
float GetShininess( void) const
{ return m_fShin ; }
bool operator == ( const Material& other) const
{ return ( m_colAmb == other.m_colAmb &&
m_colDiff == other.m_colDiff &&
m_colSpec == other.m_colSpec) ; }
private :
void AdjustAlpha( void)
{ m_colAmb.SetAlpha( m_colDiff.GetAlpha()) ; m_colSpec.SetAlpha( m_colDiff.GetAlpha()) ; }
void AdjustShin( void)
{ m_fShin = (( m_fShin < 0) ? 0 : (( m_fShin > MAX_SHIN) ? MAX_SHIN : m_fShin)) ; }
private :
Color m_colAmb ; // solo RGB
Color m_colDiff ; // RGBA ( alpha del materiale)
Color m_colSpec ; // solo RGB
float m_fShin ; // lucentezza (scala 0-128)
} ;