3D-Viewer: add skip material to model loading
This commit is contained in:
parent
72b904a978
commit
c7a546042e
|
@ -871,7 +871,7 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER* aStatusReporter, REPORTER* aWarnin
|
|||
#endif
|
||||
|
||||
|
||||
load_3D_models();
|
||||
load_3D_models( false );
|
||||
|
||||
|
||||
#ifdef PRINT_STATISTICS_3D_VIEWER
|
||||
|
@ -1250,7 +1250,7 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
|
|||
}
|
||||
|
||||
|
||||
void C3D_RENDER_RAYTRACING::load_3D_models()
|
||||
void C3D_RENDER_RAYTRACING::load_3D_models( bool aSkipMaterialInformation )
|
||||
{
|
||||
// Go for all modules
|
||||
for( auto module : m_boardAdapter.GetBoard()->Modules() )
|
||||
|
@ -1341,7 +1341,7 @@ void C3D_RENDER_RAYTRACING::load_3D_models()
|
|||
sM->m_Scale.y,
|
||||
sM->m_Scale.z ) );
|
||||
|
||||
add_3D_models( modelPtr, modelMatrix, (float)sM->m_Opacity );
|
||||
add_3D_models( modelPtr, modelMatrix, (float)sM->m_Opacity, aSkipMaterialInformation );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1351,34 +1351,8 @@ void C3D_RENDER_RAYTRACING::load_3D_models()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void C3D_RENDER_RAYTRACING::add_3D_models( const S3DMODEL *a3DModel,
|
||||
const glm::mat4 &aModelMatrix,
|
||||
float aModuleOpacity )
|
||||
MODEL_MATERIALS *C3D_RENDER_RAYTRACING::get_3D_model_material( const S3DMODEL *a3DModel )
|
||||
{
|
||||
|
||||
// Validate a3DModel pointers
|
||||
wxASSERT( a3DModel != NULL );
|
||||
|
||||
if( a3DModel == NULL )
|
||||
return;
|
||||
|
||||
wxASSERT( a3DModel->m_Materials != NULL );
|
||||
wxASSERT( a3DModel->m_Meshes != NULL );
|
||||
wxASSERT( a3DModel->m_MaterialsSize > 0 );
|
||||
wxASSERT( a3DModel->m_MeshesSize > 0 );
|
||||
wxASSERT( aModuleOpacity > 0.0f );
|
||||
wxASSERT( aModuleOpacity <= 1.0f );
|
||||
|
||||
if( aModuleOpacity > 1.0f )
|
||||
{
|
||||
aModuleOpacity = 1.0f;
|
||||
}
|
||||
|
||||
if( (a3DModel->m_Materials != NULL) && (a3DModel->m_Meshes != NULL) &&
|
||||
(a3DModel->m_MaterialsSize > 0) && (a3DModel->m_MeshesSize > 0) )
|
||||
{
|
||||
|
||||
MODEL_MATERIALS *materialVector;
|
||||
|
||||
// Try find if the materials already exists in the map list
|
||||
|
@ -1485,6 +1459,44 @@ void C3D_RENDER_RAYTRACING::add_3D_models( const S3DMODEL *a3DModel,
|
|||
}
|
||||
}
|
||||
|
||||
return materialVector;
|
||||
}
|
||||
|
||||
void C3D_RENDER_RAYTRACING::add_3D_models( const S3DMODEL *a3DModel,
|
||||
const glm::mat4 &aModelMatrix,
|
||||
float aModuleOpacity,
|
||||
bool aSkipMaterialInformation )
|
||||
{
|
||||
|
||||
// Validate a3DModel pointers
|
||||
wxASSERT( a3DModel != NULL );
|
||||
|
||||
if( a3DModel == NULL )
|
||||
return;
|
||||
|
||||
wxASSERT( a3DModel->m_Materials != NULL );
|
||||
wxASSERT( a3DModel->m_Meshes != NULL );
|
||||
wxASSERT( a3DModel->m_MaterialsSize > 0 );
|
||||
wxASSERT( a3DModel->m_MeshesSize > 0 );
|
||||
wxASSERT( aModuleOpacity > 0.0f );
|
||||
wxASSERT( aModuleOpacity <= 1.0f );
|
||||
|
||||
if( aModuleOpacity > 1.0f )
|
||||
{
|
||||
aModuleOpacity = 1.0f;
|
||||
}
|
||||
|
||||
if( (a3DModel->m_Materials != NULL) && (a3DModel->m_Meshes != NULL) &&
|
||||
(a3DModel->m_MaterialsSize > 0) && (a3DModel->m_MeshesSize > 0) )
|
||||
{
|
||||
|
||||
MODEL_MATERIALS *materialVector = NULL;
|
||||
|
||||
if( !aSkipMaterialInformation )
|
||||
{
|
||||
materialVector = get_3D_model_material( a3DModel );
|
||||
}
|
||||
|
||||
const glm::mat3 normalMatrix = glm::transpose( glm::inverse( glm::mat3( aModelMatrix ) ) );
|
||||
|
||||
for( unsigned int mesh_i = 0;
|
||||
|
@ -1551,8 +1563,10 @@ void C3D_RENDER_RAYTRACING::add_3D_models( const S3DMODEL *a3DModel,
|
|||
nt0, nt2, nt1 );
|
||||
|
||||
m_object_container.Add( newTriangle );
|
||||
newTriangle->SetMaterial( (const CMATERIAL *)&blinn_material );
|
||||
|
||||
if( !aSkipMaterialInformation )
|
||||
{
|
||||
newTriangle->SetMaterial( (const CMATERIAL *)&blinn_material );
|
||||
newTriangle->SetModelTransparency( moduleTransparency );
|
||||
|
||||
if( mesh.m_Color == NULL )
|
||||
|
@ -1581,4 +1595,5 @@ void C3D_RENDER_RAYTRACING::add_3D_models( const S3DMODEL *a3DModel,
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -201,10 +201,13 @@ private:
|
|||
void add_3D_vias_and_pads_to_container();
|
||||
void insert3DViaHole( const VIA* aVia );
|
||||
void insert3DPadHole( const D_PAD* aPad );
|
||||
void load_3D_models();
|
||||
void load_3D_models( bool aSkipMaterialInformation );
|
||||
void add_3D_models( const S3DMODEL *a3DModel,
|
||||
const glm::mat4 &aModelMatrix,
|
||||
float aModuleOpacity );
|
||||
float aModuleOpacity,
|
||||
bool aSkipMaterialInformation );
|
||||
|
||||
MODEL_MATERIALS *get_3D_model_material( const S3DMODEL *a3DModel );
|
||||
|
||||
/// Stores materials of the 3D models
|
||||
MAP_MODEL_MATERIALS m_model_materials;
|
||||
|
|
Loading…
Reference in New Issue