1

简单的问题,但我尝试了一些事情,但似乎没有任何效果。

我想使用 2D 将一些统计信息叠加到 3d VTK 场景中vtkTextActor。这很好用,但有时很难看到文本,具体取决于 3D 场景中出现的内容。

出于这个原因,我想在我的文本演员后面添加一个 2d、半透明的“框”,以提供更暗的背景。

哪个 VTK 对象适合这个?到目前为止我已经尝试过:

  • vtkLegendBoxActor:不是我想要的,但我可以使用它不带文本在屏幕上显示一个半透明的框。我无法直接调整它的大小,并且收到有关未初始化某些内容的警告。
  • vtkImageData:尝试手动创建图像数据并将其添加到场景中;我相信它被放置在 3d 场景中,而不是用作叠加层。如果不是这样,那么我根本无法展示它。
  • vtkCornerAnnotation:随窗口大小缩放,固定在角落,背景不透明度无法设置 AFAIK。
  • vtkTextActor: 无法设置背景颜色或不透明度

谁能告诉我他们如何在 VTK 中实现我所追求的目标?

4

2 回答 2

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  
于 2013-07-04T04:06:45.977 回答
0

只需使用 vtktexture、vtkimagedata 并通过像水印一样降低不透明度,将您自己的图像作为纹理背景添加到 vtkrenderer。就是这样

于 2014-09-18T09:08:51.573 回答