EgtGraphics 1.5d2 :

- prima implementazione dello shading.
This commit is contained in:
Dario Sassi
2014-04-04 09:40:34 +00:00
parent 82f1791391
commit cb34a7b71a
7 changed files with 81 additions and 10 deletions
+44 -3
View File
@@ -53,6 +53,8 @@ Scene::Scene( void)
// Sfondo
m_colBackTop.Set( 128, 128, 128) ;
m_colBackBottom.Set( 128, 128, 128) ;
// Modalità di visualizzazione
m_nShowMode = SM_WIREFRAME ;
// GeomData
m_pGeomDB = nullptr ;
m_colDef.Set( 0, 0, 0) ;
@@ -512,6 +514,9 @@ Scene::Background( void)
// disabilito lo Zdepth
glDisable( GL_DEPTH_TEST) ;
// disabilito illuminazione
glDisable( GL_LIGHTING) ;
// imposto riempimento poligoni
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL) ;
@@ -632,14 +637,50 @@ Scene::Draw( void)
// imposto la dimensione standard dei punti
glPointSize( 3) ;
// imposto disegno wireframe anche per poligoni
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE) ;
// impostazioni dipendenti dalla modalità di visualizzazione
switch ( m_nShowMode) {
case SM_WIREFRAME :
// imposto disegno wireframe anche per poligoni
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE) ;
// disabilito illuminazione
glDisable( GL_LIGHTING) ;
break ;
case SM_HIDDENLINE :
break ;
case SM_SHADING :
// imposto disegno shading per poligoni
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL) ;
// imposto tipo shading
glShadeModel( GL_SMOOTH) ;
// imposto illuminazione
float LightAmbient[] = { 0.25f, 0.25f, 0.25f, 1.0f} ;
float LightStd[] = { 0.8f, 0.8f, 0.8f, 0.8f} ;
float Light0Pos[] = { 0.8f, 0.9f, 1.2f, 0.0f} ;
float Light1Pos[] = { -0.9f, -0.7f, 0.6f, 0.0f} ;
glLightfv( GL_LIGHT0, GL_AMBIENT, LightAmbient) ;
glLightfv( GL_LIGHT0, GL_DIFFUSE, LightStd) ;
glLightfv( GL_LIGHT0, GL_SPECULAR, LightStd) ;
glLightfv( GL_LIGHT0, GL_POSITION, Light0Pos) ;
glEnable( GL_LIGHT0) ;
glLightfv( GL_LIGHT1, GL_AMBIENT, LightAmbient) ;
glLightfv( GL_LIGHT1, GL_DIFFUSE, LightStd) ;
glLightfv( GL_LIGHT1, GL_SPECULAR, LightStd) ;
glLightfv( GL_LIGHT1, GL_POSITION, Light1Pos) ;
glEnable( GL_LIGHT1) ;
glEnable( GL_LIGHTING) ;
// provvisorio
glEnable( GL_COLOR_MATERIAL) ;
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE) ;
break ;
}
// disegno le geometrie del DB
DrawGroup( GDB_ID_ROOT, GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF) ;
// aggiungo disegni diretti (senza test Zbuffer)
// aggiungo disegni diretti (senza test Zbuffer e con poligoni riempiti)
glDisable( GL_DEPTH_TEST) ;
glDisable( GL_LIGHTING) ;
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL) ;
DrawWinRect() ;
// aggiorno