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()
{}
运行结果: