a1e4c312bd
- modifiche per materiali.
88 lines
3.5 KiB
C++
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)
|
|
} ;
|