关于vtk的颜色映射原理看这篇:https://blog.csdn.net/webzhuce/article/details/78077561
我这里的只是方便自己浏览代码的。
#include <vtkActor.h>
#include <vtkConeSource.h>
#include <vtkCellArray.h>
#include <vtkFloatArray.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkLookupTable.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
int main()
{
// 立方体的顶点坐标,即几何结构
static float x[8][3] = { {0,0,0}, {4,0,0}, {4,4,0}, {0,4,0},
{0,0,4}, {4,0,4}, {4,4,4}, {0,4,4} };
// 4个顶点构成一个拓扑单元,共六个面
static vtkIdType y[6][4] = { {0,1,2,3}, {4,5,6,7}, {0,1,5,4},
{1,2,6,5}, {2,3,7,6}, {3,0,4,7} };
// 创建几何结构
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
for (int i = 0; i < 8; i++)
points->InsertPoint(i, x[i]);
// 创建拓扑结构
vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
for (int i = 0; i < 6; i++)
polys->InsertNextCell(4, y[i]);
// 创建数据集属性的数据数组对象
vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
for (int i = 0; i < 8; i++)
scalars->InsertTuple1(i, i);
// 设置多边形数据集的几何和拓扑结构,及属性数组
vtkSmartPointer<vtkPolyData> cube = vtkSmartPointer<vtkPolyData>::New();
cube->SetPoints(points);
cube->SetPolys(polys);
cube->GetPointData()->SetScalars(scalars);
// 颜色映射表
vtkSmartPointer<vtkLookupTable> colorTable = vtkSmartPointer<vtkLookupTable>::New();
colorTable->SetNumberOfColors(6);
colorTable->SetTableValue(0, 1.0, 0.0, 1.0, 1.0);
colorTable->SetTableValue(1, 0.0, 1.0, 1.0, 1.0);
colorTable->SetTableValue(2, 1.0, 1.0, 1.0, 1.0);
colorTable->SetTableValue(3, 1.0, 0.0, 1.0, 1.0);
colorTable->SetTableValue(4, 0.0, 0.0, 1.0, 1.0);
colorTable->SetTableValue(5, 1.0, 1.0, 0.0, 1.0);
colorTable->Build();
// 数据映射
vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
cubeMapper->SetInputData(cube);
cubeMapper->SetScalarRange(0, 7);
cubeMapper->SetLookupTable(colorTable);
vtkActor* cubeActor = vtkActor::New();
cubeActor->SetMapper(cubeMapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(cubeActor);
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
iren->SetInteractorStyle(style);
renWin->SetSize(600, 600);
renWin->Render();
iren->Start();
return 0;
}