Я использую VTK + Paraview для создания хороших изображений для презентации. Моя проблема заключается в следующем: у меня есть последовательность поз камеры с соответствующими изображениями в градациях серого, и я хотел бы визуализировать их в трехмерном пространстве. Для камеры я использую конус, и чтобы поставить его в правильное положение, я применяю к нему фильтр преобразования:
vtkSmartPointer<vtkConeSource> coneSource = vtkSmartPointer<vtkConeSource>::New();
coneSource->SetHeight(0.02);
coneSource->SetRadius(0.01);
coneSource->SetResolution(4);
double direction[3] = {-1,0,0};
coneSource->SetDirection(direction);
coneSource->Update();
vtkSmartPointer<vtkTransform> cone_transform = vtkSmartPointer<vtkTransform>::New();
cone_transform->Translate(translation.x()+0.16,translation.y()+0.12,translation.z()-0.2);
cone_transform->RotateWXYZ(rotation.angle(),rotation.axis().x(),rotation.axis().y(),rotation.axis().z());
vtkSmartPointer<vtkTransformPolyDataFilter> cone_transformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
cone_transformFilter->SetInputConnection(coneSource->GetOutputPort());
cone_transformFilter->SetTransform(cone_transform);
cone_transformFilter->Update();
и затем я сохраняю его в файл .vtp.
Для изображения я подумал, что было бы неплохо сохранить его в объекте vtkImageData, но тогда я не знаю, как применить к нему преобразование.
Поиск в сети не помог.
Пожалуйста, может кто-нибудь показать мне, как это сделать правильно?
Спасибо!
РЕДАКТИРОВАТЬ:
Я попытался использовать vtkImageReslice, как описано здесь:
http://www.vtk.org/pipermail/vtkusers/2010-July/061266.html
но без результатов 🙁
РЕДАКТИРОВАТЬ 2:
@Кеннет
Я попробовал так:
vtkSmartPointer<vtkImageData> imageData = vtkSmartPointer<vtkImageData>::New();
...
vtkSmartPointer<vtkTransformFilter> transformFilter = vtkSmartPointer<vtkTransformFilter>::New();
//transformFilter->SetInput(imageData);
transformFilter->SetInputConnection(imageData->GetProducerPort());
transformFilter->SetInformation(imageData->GetInformation());
transformFilter->SetTransform(vTransform);
transformFilter->Update();
но я получаю эту ошибку:
ОШИБКА: в /build/buildd/vtk-5.8.0/Filtering/vtkExecutive.cxx, строка 756
vtkStreamingDemandDrivenPipeline (0x13106e0): алгоритм vtkTransformFilter (0x130fc80) возвратил ошибку для запроса: vtkInformation (0x1310220)Отладка: выкл.
Модифицированное время: 1961
Счетчик ссылок: 1
Зарегистрированные события: (нет)
Запрос: REQUEST_DATA_OBJECT
ALGORITHM_AFTER_FORWARD: 1
FROM_OUTPUT_PORT: 0
FORWARD_DIRECTION: 0
Есть идеи, как это решить?
Здесь я нашел ответ:
http://public.kitware.com/pipermail/vtkusers/2009-January/050239.html
По сути, vtkImageData всегда должен быть выровнен по оси. Если вы хотите применить преобразование к сетке, лучше использовать vtkStructuredGrid.
Другая возможность заключается в установить пользовательское преобразование на актера / опору вместо фактического преобразования объекта. Вместо того, чтобы менять объект, вы просто изменяете сцену.
Вы можете найти TransformActor
пример полезный.