VTK 灯光类:vtkLight

VTK 灯光类:vtkLight

vtkLight 类简介

VTK 中用 vtkLight 代表现实场景中的灯光。灯光是三维渲染场景必备的要素,vtkRenderer会自动创建默认的灯光和相机。

vtkLight可以分为位置灯光(Positional Light,也叫聚光灯)和方向灯光(Direction Light)。 位置灯光是光源位置在渲染场景中的某个位置,可以指定灯光的衰减值、锥角等;方向灯光即光源位置在无穷远,可以认为光线是平行的,比如自然界中的太阳光。光源的位置和焦点的连线定义光线的方向,默认的vtkLight为方向灯光。

vtkLight 类常用方法

设置灯光颜色:

SetColor()

设置灯光位置:

SetPosition()

设置灯光焦点:

SetFocalPoint()

设置灯光强度:

SetIntensity()

打开或关闭对应灯光:

SetSwitch() // 设置灯光开还是关
SwitchOn()
SwitchOff()

实例

#include "VTKCamera.h"

#include <vtkConeSource.h>
#include <vtkSTLReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkShrinkPolyData.h>
#include <vtkCamera.h>
#include <vtkLight.h>

VTKCamera::VTKCamera(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	_pVTKWidget = new QVTKOpenGLNativeWidget();
	this->setCentralWidget(_pVTKWidget);
	// this->showMaximized();

	// 1. generate data
	vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();
	cone->SetResolution(20);
	// or, read data
	// vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
	// reader->SetFileName("42400-IDGH.stl");

	// 2. filter
	vtkSmartPointer<vtkShrinkPolyData> shrink = vtkSmartPointer<vtkShrinkPolyData>::New();
	shrink->SetShrinkFactor(0.6);
	// 3. mapper
	vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();

	// 4. actor
	vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();

	// 5. renderer
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->SetBackground(0.3, 0.6, 0.3);

	// 6. connect
	// shrink->SetInputConnection(cone->GetOutputPort());
	// mapper->SetInputConnection(cone->GetOutputPort());
	mapper->SetInputConnection(cone->GetOutputPort());
	actor->SetMapper(mapper);
	renderer->AddActor(actor);

	vtkCamera* camera = renderer->GetActiveCamera();
	camera->SetFocalPoint(0, 0, 0); // 设置焦点,默认为 (0, 0, 0)
	camera->SetPosition(5, 0, 0); // 设置相机位置,默认为 (0, 0, 1)
	camera->SetViewUp(0, 1, 0); // 设置相机的朝上方向,默认为 (0, 1, 0)
	// camera->Zoom(0.5); // 缩放视角
	// camera->Elevation(60); // 垂直旋转相机

	vtkSmartPointer<vtkLight> light = vtkSmartPointer<vtkLight>::New();
	light->SetFocalPoint(camera->GetFocalPoint());
	light->SetPosition(0, 1, 0);
	light->SetColor(1, 0, 0);
	renderer->AddLight(light);

	this->_pVTKWidget->renderWindow()->AddRenderer(renderer);
	this->_pVTKWidget->renderWindow()->Render();
}

VTKCamera::~VTKCamera()
{}

运行结果:

在这里插入图片描述

VTK(The Visualization Toolkit)是一个开源的可视化软件工具包,支持各种计算机图形学、图像处理和可视化技术。如果要调节 VTK 中的灯光,需要用到 vtkLightvtkLightActor 。 下面是一个示例代码,它在 VTK 中演示了如何调节灯光: ``` #include <vtkActor.h> #include <vtkLight.h> #include <vtkLightActor.h> #include <vtkPolyDataMapper.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> #include <vtkSphereSource.h> int main(int, char *[]) { // 创建一个球体数据源 vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); sphereSource->Update(); // 创建一个 polydata mapper vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(sphereSource->GetOutputPort()); // 创建一个 actor vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); // 创建一个渲染器 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(actor); // 创建一个灯光 vtkSmartPointer<vtkLight> light = vtkSmartPointer<vtkLight>::New(); light->SetPosition(1.0, 1.0, 1.0); light->SetFocalPoint(0.0, 0.0, 0.0); light->SetColor(1.0, 1.0, 1.0); light->SetIntensity(1.0); light->SetLightTypeToSceneLight(); renderer->AddLight(light); // 创建一个灯光 actor vtkSmartPointer<vtkLightActor> lightActor = vtkSmartPointer<vtkLightActor>::New(); lightActor->SetLight(light); // 创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值