//---------------------------------------------------------------------------- // 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) } ;