cb34a7b71a
- prima implementazione dello shading.
147 lines
6.9 KiB
C++
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
|
|
} ;
|