Files
EgtGraphics/Scene.h
T
Dario Sassi 3e0e4e55a2 EgtGraphics 1.5b2 :
- aggiunta gestione ObjNewGraphics e ObjOldGraphics.
2014-02-15 15:46:56 +00:00

108 lines
4.5 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 IGeoObj ;
//----------------------------------------------------------------------------
class Scene : public IEGrScene
{
public :
// Basic
virtual ~Scene( void) ;
virtual bool Init( IGeomDB* pGeomDB, ILogger* pLogger) ;
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 Reshape( int nW, int nH) ;
virtual bool SetExtension( const BBox3d& b3Ext) ;
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) ;
// Geometry
virtual bool UpdateExtension( void) ;
public :
// Basic
Scene( void) ;
bool MakeCurrent( void) ;
GLEWContext* glewGetContext( void)
{ return &m_glewc ; }
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) ;
// Camera
bool CalcDirUp( void) ;
// Geometry
bool DrawGroup( int nId) ;
bool DrawGeoObj( IGeoObj* pGeoObj) ;
bool DeleteObjGraphicsGroup( int nId) ;
private :
IGeomDB* m_pGeomDB ;
ILogger* m_pLogger ;
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
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 ;
double m_dHalfHeight ;
double m_dZNear ;
double m_dZFar ;
} ;