6.VTK 颜色

发布于:2025-04-19 ⋅ 阅读:(20) ⋅ 点赞:(0)

文章目录

概念

RGB颜色系统:通过红(R)、绿(G)、蓝(B)三个颜色分量的组合来定义颜色。每个分量的取值范围是0到1,其中(0, 0, 0)代表黑色,而(1, 1, 1)代表白色。可以使用vtkProperty::SetColor(r, g, b)方法为Actor设置颜色。

HSV颜色系统:基于色相(Hue)、饱和度(Saturation)和亮度(Value)三个属性来定义颜色。HSV颜色模型更接近人类对颜色的感知方式。色相表示颜色的类型(如红色、绿色等),饱和度表示颜色的纯度,亮度则控制颜色的明暗程度。这三个属性的取值同样在0到1之间。HSV颜色系统的设置可以通过vtkLookupTable类来实现。

RGB示例

#include <istream>
#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCamera.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkAutoInit.h>
#include <vtkSphereSource.h>
#include <vtkLineSource.h>
#include <vtkPlaneSource.h>
#include <vtkNamedColors.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);

using namespace std;

int main()
{
	vtkNew<vtkNamedColors> colors;

	// 创建球体数据源
	vtkNew<vtkSphereSource> sphereSource;
	sphereSource->Update();

	// 映射器
	vtkNew<vtkPolyDataMapper> mapper;
	mapper->SetInputConnection(sphereSource->GetOutputPort());

	// Actor
	vtkNew<vtkActor> actor;
	actor->SetMapper(mapper);
	// 使用RGB颜色系统设置Actor的颜色
	actor->GetProperty()->SetColor(colors->GetColor3d("Tomato").GetData());

	// 渲染器
	vtkNew<vtkRenderer> renderer;
	renderer->AddActor(actor);
	renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());

	// 渲染窗口
	vtkNew<vtkRenderWindow> renderWindow;
	renderWindow->AddRenderer(renderer);
	renderWindow->SetSize(640, 480);

	// 交互器
	vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderWindow->Render();
	renderWindowInteractor->Start();
	
	
	return 0;
}

在这里插入图片描述

HSV示例

在这里插入图片描述

#include <vtkLineSource.h>
#include <vtkPlaneSource.h>
#include <vtkNamedColors.h>
#include <vtkLookupTable.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);

using namespace std;

int main()
{
	vtkNew<vtkNamedColors> colors;

	// 创建球体数据源
	vtkNew<vtkSphereSource> sphereSource;
	sphereSource->Update();

	// Lookup Table
	vtkNew<vtkLookupTable> lookupTable;
	lookupTable->SetHueRange(0.667, 0.0); // 设置色相范围从蓝色到红色
	lookupTable->Build();

	// 映射器
	vtkNew<vtkPolyDataMapper> mapper;
	mapper->SetInputConnection(sphereSource->GetOutputPort());
	mapper->SetLookupTable(lookupTable);
	mapper->UseLookupTableScalarRangeOn();

	// Actor
	vtkNew<vtkActor> actor;
	actor->SetMapper(mapper);

	// 渲染器
	vtkNew<vtkRenderer> renderer;
	renderer->AddActor(actor);
	renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());

	// 渲染窗口
	vtkNew<vtkRenderWindow> renderWindow;
	renderWindow->AddRenderer(renderer);
	renderWindow->SetSize(640, 480);

	// 交互器
	vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderWindow->Render();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
	
}

网站公告

今日签到

点亮在社区的每一天
去签到