c++ - 在 vtk 中用 RGB 保存网格

标签 c++ vtk

我加载了一个网格(带颜色),想将其写入 .ply 文件并存储 rgb 信息。我目前有下面的代码,它使用 vtkPLYWriter 类,但这只是保存顶点而不是 RGB 信息。是否有内置的方法来执行此操作?

代码

vtkSmartPointer<vtkTransformPolyDataFilter> rotate_and_save_mesh(vtkSmartPointer<vtkPLYReader> mesh_reader, double rotation_angle, double x, double y, double z, 
        std::string& out_name, bool should_write = true){
    vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
    transform->RotateWXYZ(rotation_angle, x, y, z);
    vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();

    transformFilter->SetTransform(transform);
    transformFilter->SetInputConnection(mesh_reader->GetOutputPort());
    transformFilter->Update();

    if(should_write){
        vtkSmartPointer<vtkPLYWriter> writer = vtkSmartPointer<vtkPLYWriter>::New();
        writer->SetInputConnection(transformFilter->GetOutputPort());
        writer->SetFileName(out_name.c_str());

        writer->Write();
    }
    return transformFilter;
}

最佳答案

这很尴尬。与 vtkPolyDataXMLWriter 和大多数其他 VTK 编写器不同,您必须指定

plyWriter->SetArrayName("Colors");

你的颜色数组是在哪里创建/命名的:

vtkSmartPointer<vtkUnsignedCharArray> colors =
  vtkSmartPointer<vtkUnsignedCharArray>::New();
colors->SetNumberOfComponents(3);
colors->SetName("Colors");

关于c++ - 在 vtk 中用 RGB 保存网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783612/

相关文章:

c++ - VTK Delete() 和数据删除

vtk - Paraview "possible mismatch of datasize with declaration"错误

c++ - 服务间单向通信的选项

C++ 使用结构返回多个值

c# - 什么是通过互操作/pinvoke 提供从 c++ dll 到 c# 应用程序的日志记录的方法

c++11 - vtkImageResliceMapper 中的 VTK 相机更新问题

c# - 如何使用 WPF 项目中的 C++ 渲染

macos - CMake:MacOS 上动态链接资源的运行时错误(dyld:未加载库)

c++ - 运算符如何在数组声明中运行?

c++ - 如何省略推导参数类型的完美转发?