7b1b6e8ad8
- aggiunta gestione normali diverse sui triangoli.
125 lines
4.5 KiB
C++
125 lines
4.5 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2014-2014
|
|
//----------------------------------------------------------------------------
|
|
// File : ObjOldGraphics.h Data : 13.02.14 Versione : 1.5b1
|
|
// Contenuto : Dichiarazione della classe grafica di un oggetto geometrico.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 13.02.14 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "ObjEGrGraphics.h"
|
|
#include "OpenGL.h"
|
|
#include "/EgtDev/Include/EGkPoint3d.h"
|
|
#include <list>
|
|
|
|
class Color ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Definizione di OldGrAtom
|
|
class OldGrAtom {
|
|
public :
|
|
OldGrAtom( void) : m_nType( NONE), m_fX( 0), m_fY( 0), m_fZ( 0), m_fW( 1) {}
|
|
|
|
public :
|
|
enum GrType { NONE = 0, START = 1, VERT = 2, NORMAL = 3, COLOR = 4, END = 5} ;
|
|
|
|
public :
|
|
GrType m_nType ;
|
|
union {
|
|
int m_nMode ;
|
|
float m_fX ;
|
|
float m_fRed ;
|
|
} ;
|
|
union {
|
|
float m_fY ;
|
|
float m_fGreen ;
|
|
} ;
|
|
union {
|
|
float m_fZ ;
|
|
float m_fBlue ;
|
|
} ;
|
|
union {
|
|
float m_fW ;
|
|
float m_fAlpha ;
|
|
} ;
|
|
} ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Lista di OldGrAtom
|
|
typedef std::list<OldGrAtom> OGALIST ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
class ObjOldGraphics : public ObjEGrGraphics
|
|
{
|
|
public : // IObjGraphics
|
|
virtual ~ObjOldGraphics( void) ;
|
|
virtual void Reset( void) ;
|
|
|
|
public : // ObjEGrGraphics
|
|
virtual bool IsValid( void)
|
|
{ return m_bValid ; }
|
|
virtual void SetScene( Scene* pScene)
|
|
{ m_pScene = pScene ; }
|
|
virtual Scene* GetScene( void)
|
|
{ return m_pScene ; }
|
|
virtual void Clear( void) ;
|
|
virtual bool AddColor( const Color& colC) ;
|
|
virtual bool AddPoint( const Point3d& ptP) ;
|
|
virtual bool AddPolyLine( const PolyLine& PL) ;
|
|
virtual bool StartTriangles( int nNum) ;
|
|
virtual bool AddTriangle( const Triangle3d& Tria, const TriNormals3d& TNrms) ;
|
|
virtual bool EndTriangles( void) ;
|
|
virtual bool Draw( int nStat, int nMark) ;
|
|
|
|
public :
|
|
ObjOldGraphics( void) : m_pScene( nullptr), m_nCurrMode( GL_NONE), m_bValid( false) {}
|
|
|
|
private :
|
|
bool AddOldGrAtom( const OldGrAtom& oga)
|
|
{ try { m_ogaList.push_back( oga) ; }
|
|
catch(...) { return false ; }
|
|
return true ; }
|
|
bool AddStart( int nMode)
|
|
{ OldGrAtom oga ;
|
|
oga.m_nType = OldGrAtom::START ;
|
|
oga.m_nMode = nMode ;
|
|
return AddOldGrAtom( oga) ; }
|
|
bool AddVert3f( const Point3d& ptP)
|
|
{ OldGrAtom oga ;
|
|
oga.m_nType = OldGrAtom::VERT ;
|
|
oga.m_fX = float( ptP.x) ; oga.m_fY = float( ptP.y) ; oga.m_fZ = float( ptP.z) ;
|
|
return AddOldGrAtom( oga) ; }
|
|
bool AddNormal3f( const Vector3d& vtN)
|
|
{ OldGrAtom oga ;
|
|
oga.m_nType = OldGrAtom::NORMAL ;
|
|
oga.m_fX = float( vtN.x) ; oga.m_fY = float( vtN.y) ; oga.m_fZ = float( vtN.z) ;
|
|
return AddOldGrAtom( oga) ; }
|
|
bool AddColor( float fRed, float fGreen, float fBlue, float fAlpha = 1)
|
|
{ OldGrAtom oga ;
|
|
oga.m_nType = OldGrAtom::COLOR ;
|
|
oga.m_fRed = fRed ; oga.m_fGreen = fGreen ; oga.m_fBlue = fBlue ; oga.m_fAlpha = fAlpha ;
|
|
return AddOldGrAtom( oga) ; }
|
|
bool AddEnd( void)
|
|
{ OldGrAtom oga ;
|
|
oga.m_nType = OldGrAtom::END ;
|
|
return AddOldGrAtom( oga) ; }
|
|
|
|
private :
|
|
Scene* m_pScene ; // puntatore alla scena
|
|
bool m_bValid ; // flag
|
|
int m_nCurrMode ; // modo corrente
|
|
OGALIST m_ogaList ; // lista di atomi per vecchia grafica
|
|
} ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline const ObjOldGraphics* GetObjOldGraphics( const IGeoObj* pGObj)
|
|
{ return (dynamic_cast<const ObjOldGraphics*>(pGObj->GetObjGraphics())) ; }
|
|
inline ObjOldGraphics* GetObjOldGraphics( IGeoObj* pGObj)
|
|
{ return (dynamic_cast<ObjOldGraphics*>(pGObj->GetObjGraphics())) ; }
|