void Group::ExtrudeSilhouette( const Vector3D translation )
{
vector<Vector3D> m_vpkSilhouetteVertices;
// for all polygons..
for( unsigned int i = 0; i < m_vpkPolygons.size(); i++ )
{
// get polygon
Polygon *pkPolygon = m_vpkPolygons[i];
// check if it's visible
if( !pkPolygon->m_bIsVisible )
continue;
// construct volume's caps
m_vpkSilhouetteVertices.push_back( m_vpkVertices[(i*3)] );
m_vpkSilhouetteVertices.push_back( m_vpkVertices[(i*3)+1] );
m_vpkSilhouetteVertices.push_back( m_vpkVertices[(i*3)+2] );
m_vpkSilhouetteVertices.push_back( m_vpkVertices[(i*3)]+(m_vpkVertices[(i*3)]-translation)*100.0f );
m_vpkSilhouetteVertices.push_back( m_vpkVertices[(i*3)+2]+(m_vpkVertices[(i*3)+2]-translation)*100.0f );
m_vpkSilhouetteVertices.push_back( m_vpkVertices[(i*3)+1]+(m_vpkVertices[(i*3)+1]-translation)*100.0f );
// for every vertex..
for( unsigned int j = 0; j < 3; j++ )
{
// get neighbor
int k = pkPolygon->m_aiNeighbors[j];
// if there's no neighbour or the neighbour isn't visible..
if( (!k) &#0124;&#0124; (!m_vpkPolygons[k-1]->m_bIsVisible) )
{
// get the edges..
Vector3D &kVertex1 = m_vpkVertices[(i*3)+j];
Vector3D &kVertex2 = m_vpkVertices[(i*3)+(j+1)%3];
// extrude them..
Vector3D kVertex3 = kVertex1+(kVertex1-translation)*100.0f;
Vector3D kVertex4 = kVertex2+(kVertex2-translation)*100.0f;
// and construct volume
m_vpkSilhouetteVertices.push_back( kVertex1 );
m_vpkSilhouetteVertices.push_back( kVertex3 );
m_vpkSilhouetteVertices.push_back( kVertex2 );
m_vpkSilhouetteVertices.push_back( kVertex2 );
m_vpkSilhouetteVertices.push_back( kVertex3 );
m_vpkSilhouetteVertices.push_back( kVertex4 );
}
}
}
glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( 3, GL_FLOAT, 0, &(m_vpkSilhouetteVertices[0]) );
glDrawArrays( GL_TRIANGLES, 0, m_vpkSilhouetteVertices.size() );
glDisableClientState( GL_VERTEX_ARRAY );
}