EgtGraphics 1.6b5 :

- modifiche per gestione superfici trasparenti
- migliorata gestione colore da padre.
This commit is contained in:
Dario Sassi
2015-02-17 22:45:57 +00:00
parent 1fa95f539f
commit 6526f7ab9f
11 changed files with 170 additions and 56 deletions
+26 -6
View File
@@ -70,6 +70,8 @@ Scene::Scene( void)
m_colDef.Set( 0, 0, 0) ;
m_colMark.Set( 255, 255, 0) ;
m_colSelSurf.Set( 255, 255, 192) ;
// Superfici semitrasparenti
m_vAlphaSurf.reserve( 100) ;
// Extension
SetExtension( BBox3d( -MIN_EXTENSION, -MIN_EXTENSION, -MIN_EXTENSION,
MIN_EXTENSION, MIN_EXTENSION, MIN_EXTENSION)) ;
@@ -685,7 +687,7 @@ Scene::Draw( void)
// imposto disegno wireframe anche per poligoni
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE) ;
// disegno le geometrie del DB in una sola passata
DrawGroup( GDB_ID_ROOT, 1, MdStMk( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF)) ;
DrawGroup( GDB_ID_ROOT, 1, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ;
break ;
case SM_HIDDENLINE :
// disabilito illuminazione
@@ -696,14 +698,14 @@ Scene::Draw( void)
glEnable( GL_POLYGON_OFFSET_FILL) ;
glPolygonOffset( 1.0, 1.0) ;
glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ;
DrawGroup( GDB_ID_ROOT, 1, MdStMk( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF)) ;
DrawGroup( GDB_ID_ROOT, 1, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ;
glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) ;
glDisable( GL_POLYGON_OFFSET_FILL) ;
// disegno griglia senza illuminazione (già impostato)
DrawGrid() ;
// seconda passata per tutto in forma 0dim e curve
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE) ;
DrawGroup( GDB_ID_ROOT, 2, MdStMk( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF)) ;
DrawGroup( GDB_ID_ROOT, 2, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ;
break ;
case SM_SHADING :
// disegno griglia senza illuminazione
@@ -730,16 +732,34 @@ Scene::Draw( void)
glLightfv( GL_LIGHT1, GL_POSITION, Light1Pos) ;
glEnable( GL_LIGHT1) ;
// disegno le geometrie del DB
// prima passata per superfici con illuminazione abilitata
// annullo vettore superfici traslucide
m_vAlphaSurf.clear() ;
// prima passata per superfici completamente opache con illuminazione abilitata
glEnable( GL_POLYGON_OFFSET_FILL) ;
glPolygonOffset( 0.75, 0.75) ;
glEnable( GL_LIGHTING) ;
DrawGroup( GDB_ID_ROOT, 1, MdStMk( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF)) ;
DrawGroup( GDB_ID_ROOT, 1, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ;
glDisable( GL_POLYGON_OFFSET_FILL) ;
// seconda passata per 0dim e curve con illuminazione disabilitata
glDisable( GL_LIGHTING) ;
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE) ;
DrawGroup( GDB_ID_ROOT, 2, MdStMk( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF)) ;
DrawGroup( GDB_ID_ROOT, 2, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ;
// terza passata su vettore di superfici trasparenti con :
// illuminazione abilitata, blend abilitato e Zdepth solo in lettura
if ( m_vAlphaSurf.size() > 0) {
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL) ;
glEnable( GL_POLYGON_OFFSET_FILL) ;
glPolygonOffset( 0.75, 0.75) ;
glEnable( GL_LIGHTING) ;
glEnable( GL_BLEND) ;
glDepthMask( GL_FALSE) ;
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
DrawAlphaSurfVector() ;
m_vAlphaSurf.clear() ;
glDepthMask( GL_TRUE) ;
glDisable( GL_BLEND) ;
glDisable( GL_POLYGON_OFFSET_FILL) ;
}
break ;
}