Próbuję renderować tekst za pomocą obiektu vtk vtkVectorText. Działa dobrze dla pojedynczej lokalizacji 3d. Potrzebne jest umieszczenie tekstu 3d powyżej niektórych punktów 3d (vtkPoint). Próbowałem to zrobić za pomocą vtkTextActor3d, ale każdy obiekt tekstowy wymaga oddzielnego aktora i skończyłem z 10 tys. Aktorów, co jest dość złe i opóźnione, gdy próbuję na przykład obrócić scenę.VTK - Jak renderować wiele obiektów tekstowych 3D z jednym aktorem
Próbowałem także zastosować appendFilter, aby utworzyć tablicę vtkVectorText, pobrać nieuporządkowaną siatkę z obiektu appendFilter, a następnie przekonwertować ją na polydata w celu renderowania niestrukturowanej siatki z wybranymi lokalizacjami punktów. Nic nie pokazuje, ponieważ nie wiem, jaki jest najlepszy sposób na zrobienie tego.
Czy ktoś może mi pomóc z tym?
Oto mój kod z ostatniej strony:
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);