VTK模型渲染层级方式设置(非render层级更改)
【代码】VTK模型渲染层级方式设置(非render层级更改)
·
// This turns on resolve coincident topology for everything
// as it is a class static on the mapper
vtkPolyDataMapper::SetResolveCoincidentTopologyToPolygonOffset();
if (this->AlwaysOnTop)
{
// max value 65536 so we subtract 66000 to make sure we are
// zero or negative
this->LinesMapper->SetRelativeCoincidentTopologyLineOffsetParameters(0, -66000);
this->LinesMapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(0, -66000);
this->LinesMapper->SetRelativeCoincidentTopologyPointOffsetParameter(-66000);
this->Mapper->SetRelativeCoincidentTopologyLineOffsetParameters(0, -66000);
this->Mapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(0, -66000);
this->Mapper->SetRelativeCoincidentTopologyPointOffsetParameter(-66000);
this->ActiveMapper->SetRelativeCoincidentTopologyLineOffsetParameters(0, -66000);
this->ActiveMapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(0, -66000);
this->ActiveMapper->SetRelativeCoincidentTopologyPointOffsetParameter(-66000);
}
else
{
this->LinesMapper->SetRelativeCoincidentTopologyLineOffsetParameters(-1, -1);
this->LinesMapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(-1, -1);
this->LinesMapper->SetRelativeCoincidentTopologyPointOffsetParameter(-1);
this->Mapper->SetRelativeCoincidentTopologyLineOffsetParameters(-1, -1);
this->Mapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(-1, -1);
this->Mapper->SetRelativeCoincidentTopologyPointOffsetParameter(-1);
this->ActiveMapper->SetRelativeCoincidentTopologyLineOffsetParameters(-1, -1);
this->ActiveMapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(-1, -1);
this->ActiveMapper->SetRelativeCoincidentTopologyPointOffsetParameter(-1);
}
也可以采用更改z深度方式
mapper->AddShaderReplacement(vtkShader::Fragment, "//VTK::Depth::Impl", true,
"gl_FragDepth = gl_FragCoord.z * 0.01;\n", true);
也可以关闭深度测试
// 深度禁用
bool DepthTest;
if( vtkGenericOpenGLRenderWindow::SafeDownCast( Renderer->GetRenderWindow() ) )
{
DepthTest = vtkGenericOpenGLRenderWindow::SafeDownCast( Renderer->GetRenderWindow() )->GetState()->GetEnumState( GL_DEPTH_TEST );
vtkGenericOpenGLRenderWindow::SafeDownCast( Renderer->GetRenderWindow() )->GetState()->SetEnumState( GL_DEPTH_TEST, false );
}
std::vector<vtkSmartPointer<vtkProp>> vecActor = m_Handle->GetRenderActor(3);
for( auto item : vecActor )
{
count += item->RenderOverlay( v );
vtkActor::SafeDownCast( item )->GetProperty()->SetRepresentationToSurface();
}
// 深度恢复启用
if( vtkGenericOpenGLRenderWindow::SafeDownCast( Renderer->GetRenderWindow() ) )
{
vtkGenericOpenGLRenderWindow::SafeDownCast( Renderer->GetRenderWindow() )->GetState()->SetEnumState( GL_DEPTH_TEST, DepthTest );
}
更多推荐
所有评论(0)