EgtGraphics 1.6b5 :
- modifiche per gestione superfici trasparenti - migliorata gestione colore da padre.
This commit is contained in:
+26
-6
@@ -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 ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user