目录
一、VTK光照
1、关于vtkLight常用的方法
2、最终效果
二、相机设置
1、相机设置
2、效果
一、VTK光照
通过设置光照,可以达到不同颜色的目的,参考博客:
VTK修炼之道7_三维场景基本要素:光照_vtk 光照_沈子恒的博客-CSDN博客
1、关于vtkLight常用的方法
SetColor() — 设置光照的颜色(一般是设置rgb)
SetPosition() — 设置光照位置
SetFocalPoint() — 设置光照焦点
SetIntensity() — 设置光照的强度
SetSwitch() / SwitchOn()/ SwitchOff()— 打开或关闭对应的光照。
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkLight.h>
#include <vtkCamera.h>
#include <vtkProperty.h>
int main()
{
//设置圆
vtkSmartPointer<vtkSphereSource> sphere =
vtkSmartPointer<vtkSphereSource>::New();
sphere->SetCenter(0, 0, 0);
sphere->SetRadius(2.0);
sphere->SetThetaResolution(15);
sphere->SetPhiResolution(15);
sphere->Update();
//设置mapper
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphere->GetOutputPort());
//设置actor
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
//设置vtkRenderer
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(0, 0, 0);
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
renWin->SetSize(640, 480);
renWin->Render();
renWin->SetWindowName("Lights");
vtkSmartPointer<vtkRenderWindowInteractor> vtkren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkren->SetRenderWindow(renWin);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
vtkren->SetInteractorStyle(style);
//添加光照1(绿光)
vtkSmartPointer<vtkLight> myLight1 = vtkSmartPointer<vtkLight>::New();
myLight1->SetColor(0, 1, 0);
myLight1->SetPosition(0, 0, 6);
myLight1->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
renderer->AddLight(myLight1);
//添加光照2(蓝光)
vtkSmartPointer<vtkLight> myLight2 = vtkSmartPointer<vtkLight>::New();
myLight2->SetColor(0, 0, 1);
myLight2->SetPosition(0, 0, -6);
myLight2->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
renderer->AddLight(myLight2);
vtkren->Initialize();
vtkren->Start();
return 0;
}
2、最终效果
二、相机设置
1、相机设置
相机位置:vtkCamera::SetPosition()或者GetPosition()
相机焦点:GetFocalPoint或者是SetFocalPoint
投影视角:(View Angle),默认的视角大小为30º,GetViewAngle()或者是SetViewAngle()
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkConeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkLight.h>
#include <vtkCamera.h>
#include <vtkProperty.h>
int main()
{
vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();
cone->SetRadius(0.5);
cone->SetCenter(0, 0, 0);
//设置mapper
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(cone->GetOutputPort());
//设置actor
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
//设置vtkRenderer
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(0, 0, 0);
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
renWin->SetSize(640, 480);
renWin->Render();
renWin->SetWindowName("Camera");
vtkSmartPointer<vtkRenderWindowInteractor> vtkren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkren->SetRenderWindow(renWin);
//获取默认相机参数
vtkSmartPointer<vtkCamera> activeCamera = renderer->GetActiveCamera();
double position[3] = { 0.0,0.0,0.0 };
activeCamera->GetPosition(position);
cout << "Default position:" << position[0] << "," << position[1] << "," << position[2]<<endl;//0,0,3.2
double focalPoint[3] = {0.0,0.0,0.0};
activeCamera->GetFocalPoint(focalPoint);
cout << "Default Focal Point:" << focalPoint[0] << "," << focalPoint[0] << "," << focalPoint[2] << endl;//0,0,0
double viewAngle = activeCamera->GetViewAngle();
cout << "viewAngle:"<< viewAngle << endl;
//加入自己的相机参数
vtkSmartPointer<vtkCamera> myCamera = vtkSmartPointer<vtkCamera>::New();
position[0] = 0.0;
position[1] = 0.0;
position[2] = 1.0;
myCamera->SetPosition(position);
focalPoint[0] = 0;
focalPoint[1] = 0;
focalPoint[2] = 0;
myCamera->SetFocalPoint(focalPoint);
viewAngle = 45.0;
myCamera->SetViewAngle(viewAngle);
renderer->SetActiveCamera(myCamera);
//添加光照1(绿光)
vtkSmartPointer<vtkLight> myLight1 = vtkSmartPointer<vtkLight>::New();
myLight1->SetColor(0, 1, 0);
myLight1->SetPosition(0, 0, 6);
myLight1->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
renderer->AddLight(myLight1);
vtkren->Initialize();
vtkren->Start();
return 0;
}
将renderer->SetActiveCamera(myCamera);这句屏蔽,可以看到最初效果如下:
2、效果
放开那句之后,加入自定义相机之后的效果,如下:
本文为作者原创,转载,请标明出处!
推荐博客:精灵球Plus介绍_清风徐来Groot的博客-CSDN博客
百度云盘:链接:https://pan.baidu.com/s/11b634VvKMIsGdahyBLpZ3Q 提取码:6666