简单的问题,但我尝试了一些事情似乎没有任何作用。
我想使用2D vtkTextActor
将一些统计信息叠加到3d VTK场景上。这样可以正常工作,但有时很难看到文本,具体取决于3D场景中显示的内容。
出于这个原因,我想在我的文字演员后面添加一个2d半透明的“盒子”,以提供更暗的背景。
哪个VTK对象适合这个?到目前为止我已经尝试过了:
vtkLegendBoxActor
:不是我想要的,但我可以在没有文字的情况下使用它来在屏幕上显示半透明的框。我无法直接调整大小,因此我收到有关未初始化某些内容的警告。vtkImageData
:尝试手动创建图像数据并将其添加到场景中;我相信它被放置在3d场景中而不是用作叠加层。如果情况并非如此,那么我根本无法展示它。vtkCornerAnnotation
:窗口大小的缩放比例固定在一个角落,无法设置背景不透明度AFAIK。vtkTextActor
:无法设置背景颜色或不透明度有谁能告诉我他们如何实现我在VTK中所追求的目标?
答案 0 :(得分:1)
我找到了一种方法,vtkPolyMapper2D
似乎可行。这似乎是一种非常愚蠢的方式。如果有更优雅的东西,我会全力以赴。
import vtk
extents = [[0,0],[620,0],[620,220],[0,220]]
polyPoints = vtk.vtkPoints()
for x, y in extents:
polyPoints.InsertNextPoint(x, y, 0)
num_corners = len(extents)
polyCells = vtk.vtkCellArray()
polyCells.InsertNextCell(num_corners + 1)
for i in range(0, num_corners):
polyCells.InsertCellPoint(i)
polyCells.InsertCellPoint(0) ## Rejoin at the end
poly_profile = vtk.vtkPolyData()
poly_profile.SetPoints(polyPoints)
poly_profile.SetPolys(polyCells) ## Goes solid
cut_triangles = vtk.vtkTriangleFilter()
cut_triangles.SetInput(poly_profile)
_poly_mapper = vtk.vtkPolyDataMapper2D()
_poly_mapper.SetInput(poly_profile)
_poly_mapper.SetInputConnection(cut_triangles.GetOutputPort())
_actor = vtk.vtkActor2D()
_actor.SetMapper(_poly_mapper)
_actor.GetProperty().SetColor([0.1,0.1,0.1])
_actor.GetProperty().SetOpacity(0.5)
#Add to renderer as normal
答案 1 :(得分:0)
只需使用vtktexture,vtkimagedata&通过降低像水印这样的不透明度,将您自己的图像作为纹理背景添加到vtkrenderer。多数民众赞成