diff --git a/EgtGraphics.vcxproj b/EgtGraphics.vcxproj
index a22d313..ae0ab20 100644
--- a/EgtGraphics.vcxproj
+++ b/EgtGraphics.vcxproj
@@ -203,6 +203,7 @@ copy $(TargetPath) \EgtProg\Dll64
+
diff --git a/EgtGraphics.vcxproj.filters b/EgtGraphics.vcxproj.filters
index 32e4ca2..61f7d29 100644
--- a/EgtGraphics.vcxproj.filters
+++ b/EgtGraphics.vcxproj.filters
@@ -66,6 +66,9 @@
File di intestazione
+
+ File di intestazione
+
diff --git a/ObjEGrGraphics.h b/ObjEGrGraphics.h
index 1782fe8..8d6fdff 100644
--- a/ObjEGrGraphics.h
+++ b/ObjEGrGraphics.h
@@ -20,6 +20,7 @@ class Scene ;
class Color ;
class PolyLine ;
class Triangle3d ;
+class TriNormals3d ;
//----------------------------------------------------------------------------
class ObjEGrGraphics : public IObjGraphics
@@ -33,7 +34,7 @@ class ObjEGrGraphics : public IObjGraphics
virtual bool AddPoint( const Point3d& ptP) = 0 ;
virtual bool AddPolyLine( const PolyLine& PL) = 0 ;
virtual bool StartTriangles( int nNum) = 0 ;
- virtual bool AddTriangle( const Triangle3d& Tria) = 0 ;
+ virtual bool AddTriangle( const Triangle3d& Tria, const TriNormals3d& TNrms) = 0 ;
virtual bool EndTriangles( void) = 0 ;
virtual bool Draw( int nStat, int nMark) = 0 ;
} ;
diff --git a/ObjNewGraphics.cpp b/ObjNewGraphics.cpp
index 973d94a..9a0729b 100644
--- a/ObjNewGraphics.cpp
+++ b/ObjNewGraphics.cpp
@@ -166,7 +166,7 @@ ObjNewGraphics::StartTriangles( int nNum)
//----------------------------------------------------------------------------
bool
-ObjNewGraphics::AddTriangle( const Triangle3d& Tria)
+ObjNewGraphics::AddTriangle( const Triangle3d& Tria, const TriNormals3d& TNrms)
{
if ( m_pScene == nullptr || ! m_pScene->MakeCurrent())
return false ;
@@ -175,11 +175,11 @@ ObjNewGraphics::AddTriangle( const Triangle3d& Tria)
return false ;
// recupero il conteggio dei vertici
int nCount = m_ngaList.back().m_nCount ;
- // emetto i vertici del triangolo
+ // emetto i vertici e le normali del triangolo
for ( int i = 0 ; i < 3 ; ++ i) {
Vert3f v3V( Tria.GetP( i)) ;
glBufferSubData( GL_ARRAY_BUFFER, 2 * nCount * SIZEV3F, SIZEV3F, &v3V) ;
- Vert3f v3N( Tria.GetN()) ;
+ Vert3f v3N( TNrms.vtN[i]) ;
glBufferSubData( GL_ARRAY_BUFFER, ( 2 * nCount + 1) * SIZEV3F, SIZEV3F, &v3N) ;
++ nCount ;
}
diff --git a/ObjNewGraphics.h b/ObjNewGraphics.h
index 7c6ab0a..19025bf 100644
--- a/ObjNewGraphics.h
+++ b/ObjNewGraphics.h
@@ -70,7 +70,7 @@ class ObjNewGraphics : public ObjEGrGraphics
virtual bool AddPoint( const Point3d& ptP) ;
virtual bool AddPolyLine( const PolyLine& PL) ;
virtual bool StartTriangles( int nNum) ;
- virtual bool AddTriangle( const Triangle3d& Tria) ;
+ virtual bool AddTriangle( const Triangle3d& Tria, const TriNormals3d& TNrms) ;
virtual bool EndTriangles( void) ;
virtual bool Draw( int nStat, int nMark) ;
diff --git a/ObjOldGraphics.cpp b/ObjOldGraphics.cpp
index d7d74e7..03c7581 100644
--- a/ObjOldGraphics.cpp
+++ b/ObjOldGraphics.cpp
@@ -105,17 +105,16 @@ ObjOldGraphics::StartTriangles( int nNum)
//----------------------------------------------------------------------------
bool
-ObjOldGraphics::AddTriangle( const Triangle3d& Tria)
+ObjOldGraphics::AddTriangle( const Triangle3d& Tria, const TriNormals3d& TNrms)
{
// modo corrente deve essere triangoli
if ( m_nCurrMode != GL_TRIANGLES)
return false ;
- // emetto la normale del triangolo
- AddNormal3f( Tria.GetN()) ;
- // emetto i vertici del triangolo
- AddVert3f( Tria.GetP( 0)) ;
- AddVert3f( Tria.GetP( 1)) ;
- AddVert3f( Tria.GetP( 2)) ;
+ // emetto le normali e i vertici del triangolo
+ for ( int i = 0 ; i < 3 ; ++ i) {
+ AddNormal3f( TNrms.vtN[i]) ;
+ AddVert3f( Tria.GetP( i)) ;
+ }
return true ;
}
diff --git a/ObjOldGraphics.h b/ObjOldGraphics.h
index de3ae73..fa83f71 100644
--- a/ObjOldGraphics.h
+++ b/ObjOldGraphics.h
@@ -73,7 +73,7 @@ class ObjOldGraphics : public ObjEGrGraphics
virtual bool AddPoint( const Point3d& ptP) ;
virtual bool AddPolyLine( const PolyLine& PL) ;
virtual bool StartTriangles( int nNum) ;
- virtual bool AddTriangle( const Triangle3d& Tria) ;
+ virtual bool AddTriangle( const Triangle3d& Tria, const TriNormals3d& TNrms) ;
virtual bool EndTriangles( void) ;
virtual bool Draw( int nStat, int nMark) ;
diff --git a/SceneGeom.cpp b/SceneGeom.cpp
index c5775d9..6ed9644 100644
--- a/SceneGeom.cpp
+++ b/SceneGeom.cpp
@@ -263,9 +263,11 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nObjStat, int nObjMark)
pGraphics->StartTriangles( pSTM->GetTriangleNum()) ;
// ciclo sui triangoli della superficie
Triangle3d Tria ;
+ TriNormals3d TNrms ;
int nId = pSTM->GetFirstTriangle( Tria) ;
while ( nId != -1) {
- pGraphics->AddTriangle( Tria) ;
+ pSTM->GetTriangleSmoothNormals( nId, TNrms) ;
+ pGraphics->AddTriangle( Tria, TNrms) ;
nId = pSTM->GetNextTriangle( nId, Tria) ;
}
pGraphics->EndTriangles() ;