vtk 객체 vtkVectorText를 사용하여 텍스트를 렌더링하려고합니다. 단일 3D 위치에서 잘 작동합니다. 내가 필요한 것은 3d (vtkPoint) 포인트 위에 3d 텍스트를 배치하는 것입니다. vtkTextActor3d를 사용하여 작업을 시도했지만 각각의 텍스트 객체에는 별도의 액터가 필요하며 10k 액터로 끝났습니다. 예를 들어 장면을 회전 시키려고하면 꽤 나 빠지고 느려집니다.VTK - 단일 액터로 여러 3D 텍스트 객체를 렌더링하는 방법
또한 appendFilter를 적용하여 vtkVectorText 배열을 만들고 appendFilter의 객체에서 구조화되지 않은 격자를 가져온 다음이를 polydata로 변환하여 원하는 점 위치로 구조화되지 않은 격자를 렌더링합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇인지 알 수 없으므로 아무 것도 보여주지 않습니다.
누군가가 도와 줄 수 있습니까?
vtkSmartPointer<vtkPolyData> pointsHolder = vtkSmartPointer<vtkPolyData>::New();
pointsHolder->SetPoints(points); // I assume that these are the points where you want the object to be rendered
vtkSmartPointer<vtkGlyph3DMapper> glyphMapper = vtkSmartPointer<vtkGlyph3DMapper>::New();
glyphMapper->SetSourceConnection(vecText->GetOutputPort()); // this says WHAT should be rendered
glyphMapper->SetInputData(pointsHolder); // this says WHERE
textActor->SetMapper(glyphMapper);
이것은 렌더링됩니다 텍스트가 각 지점에 대해 동일
vtkSmartPointer<vtkAppendFilter> appendFilter = vtkSmartPointer<vtkAppendFilter>::New();
//for each point
for (int i = 0; i < N;i++) {
vtkSmartPointer<vtkVectorText> vecText = vtkSmartPointer<vtkVectorText>::New();
vecText->SetText("My text, needs to appear multiple times");
vecText->Update();
appendFilter->AddInputData(vecText->GetOutput());
appendFilter->Update();
}
vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid = appendFilter->GetOutput();
unstructuredGrid->Allocate(N);
unstructuredGrid->SetPoints(points);
vtkSmartPointer<vtkGeometryFilter> geometryFilter = vtkSmartPointer<vtkGeometryFilter>::New();
geometryFilter->SetInputData(unstructuredGrid);
geometryFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> textMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
textMapper->SetInputConnection(geometryFilter->GetOutputPort());
vtkSmartPointer<vtkActor> textActor = vtkSmartPointer<vtkActor>::New();
textActor->SetMapper(textMapper);
textActor->GetProperty()->SetColor(0, 1, 0);
renderer->AddActor(textActor);