Files
EgtGraphics/Scene.h
T
Dario Sassi cb34a7b71a EgtGraphics 1.5d2 :
- prima implementazione dello shading.
2014-04-04 09:40:34 +00:00

147 lines
6.9 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2013-2014
//----------------------------------------------------------------------------
// File : Scene.h Data : 03.02.14 Versione : 1.5b1
// Contenuto : Dichiarazione della classe gestione scena.
//
//
//
// Modifiche : 29.01.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
//----------------------------------------------------------------------------
#include "/EgtDev/Include/EGrScene.h"
#include "OpenGL.h"
class IGdbIterator ;
//----------------------------------------------------------------------------
class Scene : public IEGrScene
{
public :
// Basic
virtual ~Scene( void) ;
virtual bool Init( IGeomDB* pGeomDB) ;
virtual bool CreateContext( HDC hDC, int nDriver, bool b2Buff, int nColorBits, int nDepthBits) ;
virtual bool IsValid( void)
{ return ( m_hDC != nullptr && m_hRC != nullptr) ; }
virtual std::string GetOpenGLInfo( void) ;
virtual std::string GetGLSLInfo( void) ;
virtual std::string GetPixelFormatInfo( void) ;
virtual bool RedrawWindow( void) ;
virtual bool Reshape( int nW, int nH) ;
virtual bool SetBackground( Color colBackTop, Color colBackBottom) ;
virtual bool Prepare( void) ;
virtual bool Draw( void) ;
virtual bool Project( const Point3d& ptWorld, Point3d& ptView) ;
virtual bool UnProject( const Point3d& ptView, Point3d& ptWorld) ;
virtual void Destroy( void) ;
// Camera
virtual bool SetCenter( const Point3d& ptCenter) ;
virtual bool SetCamera( double dAngVertDeg, double dAngOrizzDeg, double dDist) ;
virtual bool SetCamera( int nDir, double dDist = 0) ;
virtual const Point3d& GetCenter( void)
{ return m_ptCenter ; }
virtual Point3d GetProjectedCenter( void) ;
virtual void GetCamera( double* pdAngVertDeg, double* pdAngOrizzDeg, double* pdDist = nullptr) ;
virtual int GetCameraDir( void) ;
virtual bool PanCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) ;
virtual bool RotateCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) ;
virtual bool ZoomAll( void) ;
virtual bool ZoomChange( double dCoeff) ;
virtual bool ZoomOnPoint( const Point3d& ptWin, double dCoeff) ;
virtual bool ZoomWin( const Point3d& ptWin1, const Point3d& ptWin2) ;
// ShowMode
virtual bool SetShowMode( int nShowMode)
{ if ( nShowMode != SM_WIREFRAME &&
nShowMode != SM_HIDDENLINE &&
nShowMode != SM_SHADING)
return false ;
m_nShowMode = nShowMode ;
return true ; }
virtual int GetShowMode( void)
{ return m_nShowMode ;}
// Geometry
virtual bool SetExtension( const BBox3d& b3Ext) ;
virtual bool UpdateExtension( void) ;
virtual bool SetMark( Color colMark) ;
// Aux
virtual bool SetWinRectAttribs( bool bOutline, Color WRcol) ;
virtual bool SetWinRect( const Point3d& ptWinRectP1, const Point3d& ptWinRectP2) ;
virtual bool ResetWinRect( void) ;
public :
// Basic
Scene( void) ;
bool MakeCurrent( void) ;
GLEWContext* glewGetContext( void)
{ return &m_glewc ; }
// Geometry
Color GetMark( void)
{ return m_colMark ; }
private :
// Basic
int ChooseGenPixelFormat( int nPfd, bool b2Buff, int nColorBits, int nDepthBits) ;
WGLEWContext* wglewGetContext( void)
{ return &m_wglewc ; }
bool CalcExtView( void) ;
bool CalcDimViewFromExtView( void) ;
bool AdjustDimView( double dHalfWidth, double dHalfHeight) ;
bool CalcClippingPlanesFromExtView( void) ;
bool Background( void) ;
// Camera
bool VerifyCamera( void) ;
bool CalcDirUp( void) ;
bool CalcCameraFrame( Frame3d& frView) ;
// Geometry
bool DrawGroup( int nId, int nParentMode, int nParentStat, int nParentMark) ;
bool DrawGroup( const IGdbIterator& iIter, int nParentMode, int nParentStat, int nParentMark) ;
bool DrawGeoObj( const IGdbIterator& iIter, int nObjStat, int nObjMark) ;
bool DeleteObjGraphicsGroup( int nId) ;
// Aux
bool DrawWinRect( void) ;
private :
HDC m_hDC ; // Device Context
HGLRC m_hRC ; // OpenGL Rendering Context
WGLEWContext m_wglewc ; // WGLEW Context
GLEWContext m_glewc ; // GLEW Context
bool m_bNewWay ; // flag che indica nuova modalità (OpenGL 3.0 in poi)
Point3d m_ptCenter ; // centro verso cui è rivolta la camera
Vector3d m_vtDirCamera ; // versore direzione dal centro alla camera
double m_dDistCamera ; // distanza dal centro alla camera
Vector3d m_vtUp ; // versore direzione Su della camera
bool m_bUpOk ; // flag per stato aggiornamento di Up
int m_nViewportW ; // larghezza della finestra
int m_nViewportH ; // altezza della finestra
Color m_colBackTop ; // colore di sfondo in alto
Color m_colBackBottom ; // colore di sfondo in basso
int m_nShowMode ; // modo di visualizzazione (wireframe, hiddenline, shading)
IGeomDB* m_pGeomDB ; // puntatore al DB geometrico
Color m_colDef ; // colore di default
Color m_colMark ; // colore per marcatura
BBox3d m_b3ExtWorld ; // estensione della geometria nel riferimento globale (mondo)
BBox3d m_b3ExtView ; // estensione nel riferimento di vista
bool m_bExtViewOk ; // flag per stato aggiornamento di EView
double m_dHalfWidth ; // semialtezza della vista
double m_dHalfHeight ; // semilarghezza della vista
double m_dZNear ; // distanza del piano di clipping vicino
double m_dZFar ; // distanza del piano di clipping lontano
bool m_bOutlineWR ; // flag per disegno WinRect con solo contorno o pieno
Color m_colorWR ; // colore per WinRect
bool m_bWinRect ; // flag esistenza rettangolo temporaneo in finestra
Point3d m_ptWinRectP1 ; // primo estremo del rettangolo temporaneo
Point3d m_ptWinRectP2 ; // secondo estremo del rettangolo temporaneo
} ;