VTK+Qt带颜色点云显示

   struct PointRGB
{
double x;
double y;
double z;
double r;
double g;
double b;
};

void Vtk_RGB_Point()

vtkSmartPointer<vtkRenderer> Renderer = vtkSmartPointer<vtkRenderer>::New();

        vector<PointRGB> pointrgb;

vtkSmartPointer<vtkActor> anActor = vtkSmartPointer<vtkActor>::New();
vtkSmartPointer<vtkPolyVertex>polyVertex = vtkSmartPointer<vtkPolyVertex>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New();
vtkSmartPointer<vtkFloatArray>pointsScalars = vtkSmartPointer<vtkFloatArray>::New();
vtkSmartPointer<vtkUnstructuredGrid> aGrid = vtkSmartPointer<vtkUnstructuredGrid>::New();
vtkSmartPointer<vtkDataSetMapper> aMapper = vtkSmartPointer<vtkDataSetMapper>::New();
vtkSmartPointer<vtkRenderer> newRenderer = vtkSmartPointer<vtkRenderer>::New();

QString path = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("打开"), QString::fromLocal8Bit("G:/点云数据/新建文件夹"), QString::fromLocal8Bit("文本文件(*.txt *.txt)"));
QByteArray ba = path.toLocal8Bit();
char *mm = ba.data();
FILE *fp = NULL;
fp = fopen(mm, "r");  //2DpointDatas.txt  
double x = 0, y = 0, z = 0;
double r = 0, g = 0, b = 0;
int i = 0;
while (!feof(fp))
{
PointRGB point;
fscanf(fp, "%lf %lf %lf %lf %lf %lf", &x, &y, &z, &r, &g, &b);
point.x = x; point.y = y; point.z = z;
point.r = r; point.g = g; point.b = b;
pointrgb.push_back(point);
i++;
}
fclose(fp);
//根据点云坐标以及颜色信息,构造vtk中的actor 
//参数:点云读取出来的xyz坐标信息 点云读取出来的RGB信息 vtk中的actor
int number = pointrgb.size(); //几何数据
points->SetNumberOfPoints(number);
lut->SetNumberOfTableValues(number);
lut->Build();


for (i = 0; i < number; i++)
{
points->InsertPoint(i, pointrgb[i].x, pointrgb[i].y, pointrgb[i].z);
lut->SetTableValue(i, pointrgb[i].r / 255.0, pointrgb[i].g / 255.0, pointrgb[i].b / 255.0, 1);
//lut->SetTableValue(i, 255.0 / 255.0, 255.0 / 255.0, 255.0 / 255.0, 1);
} //拓扑数据


polyVertex->GetPointIds()->SetNumberOfIds(number);//必须设置Id个数,否则可以编译,不能运行 


pointsScalars->SetNumberOfTuples(number);//此行可有可无 
for (i = 0; i < number; i++)
{
polyVertex->GetPointIds()->SetId(i, i);//第一个参数是几何point的ID号,第2个参数是拓扑中的Id号
pointsScalars->InsertValue(i, i);//第1个参数是points点的Id,第2个参数是该点的属性值
}
aGrid->Allocate(1, 1);
aGrid->SetPoints(points);
aGrid->GetPointData()->SetScalars(pointsScalars);
aGrid->InsertNextCell(polyVertex->GetCellType(), polyVertex->GetPointIds()); //设置映射器


aMapper->SetInputData(aGrid);
aMapper->ScalarVisibilityOn();
aMapper->SetScalarRange(0, number - 1);
aMapper->SetLookupTable(lut);


anActor->SetMapper(aMapper);
anActor->GetProperty()->SetRepresentationToPoints(); //anActor->GetProperty()->SetDiffuseColor(1,0,0);
anActor->GetProperty()->SetPointSize(1);


//leftRenderer->AddActor(sphereActor);
//newRenderer->SetBackground(1.0, 1.0, 1.0);
Renderer->AddActor(anActor);
Renderer->ResetCamera();
Renderer->DrawOn();
ui.qvtkWidget->GetRenderWindow()->Render();
ui.qvtkWidget->GetRenderWindow()->AddRenderer(Renderer);

ui.qvtkWidget->update();

}

效果图

VTK+Qt带颜色点云显示