Fri, 01/04/2013 - 05:24
Hi, I'm using MeshVS_MeshPrsBuilder for the fast display of STL meshes, which is so much faster than the more standard StlAPI.
( IMHO converting meshes -> breps by default is a bad idea... the docs also dont state that this conversion is going on, which is worrying )
Even though I'm setting the following flags ( MeshVS_DA_SmoothShading and MeshVS_DA_Reflection are necessary for gouraud shading ):
mesh_drawer.SetMaterial(MeshVS_DA_FrontMaterial, Graphic3d_MaterialAspect(Graphic3d_NOM_SATIN))
mesh_drawer.SetBoolean( MeshVS_DA_DisplayNodes, False)
mesh_drawer.SetBoolean( MeshVS_DA_ShowEdges, False)
mesh_drawer.SetBoolean( MeshVS_DA_SmoothShading, True)
mesh_drawer.SetBoolean( MeshVS_DA_Reflection, True)
I'm not arriving to smooth shading.
Any ideas what might be going wrong?
I've been glancing over the c++ classes and can't figure out why smooth shading wont pan out...
Thanks,
-jelle
Thu, 01/10/2013 - 23:53
Hi Jelle,
I think this fails because SmoothShading requires mean normal vectors at mesh nodes, not element normal vectors.
MeshVS_MeshPrsBuilder will ask the data source (any class derived from MeshVS_DataSource) about nodal normal
vectors using the function GetNodeNormal(). However by default in MeshVS_DataSource this function returns false,
which will deactivate smooth shading:
Standard_BooleanMeshVS_DataSource::GetNodeNormal( const Standard_Integer ranknode, const Standard_Integer Id, Standard_Real &nx, Standard_Real &ny, Standard_Real &nz)
{
return Standard_False;
}
In PythonOCC provided SMESH_MeshVSLink (derived from MeshVS_DataSource ) implemented by Sioutis Fotios this function is not implemented.
I will implement this function and let you know if that would solve this problem (I am working on SMESH_MeshVSLink for speed improvements when displaying
volume meshes at the moment anyway).
Regards,
Mark
Fri, 01/11/2013 - 17:24
Hi,
smooth shading works nicely with surface meshes if a MeshVS_DataSource3D derived class is
provided to MeshVS_MeshPrsBuilder that implements nodal normal vectors (GetNodeNormal method).
In the attached ZIP file such a class is implemented and two examples are shown (smooth shading visualization
of 2 surface grids created with NETGEN).
Mark