实例7:相机控制
未加入相机控制时演员位置:
加入相机控制时演员位置(视角为x轴负方向):
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkConeSource.h>//源数据
#include <vtkPolyDataMapper.h>//数据映射
#include <vtkRenderer.h>//绘制器
#include <vtkRenderWindow.h>//绘制窗口
#include <vtkActor.h>//演员
#include <vtkCamera.h>//照相机
#include <vtkRenderWindowInteractor.h>//加入交互机制类
#include <vtkProperty.h>//属性
#include <vtkLight.h>//光照类
int main()
{
//指针创建一个圆锥cone
vtkConeSource* cone = vtkConeSource::New();
cone->SetResolution(5);//圆锥的棱边数
cone->SetHeight(3);//指定高度
cone->SetRadius(1);//指定半径
//实例化一个映射器coneMapper
vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());//源数据输出给映射器输入
//创建一个演员对象coneActor
vtkActor* coneActor = vtkActor::New();
coneActor->SetMapper(coneMapper);//为演员指定mapper进行映射
coneActor->GetProperty()->SetColor(1.0, 1.0, 1.0);//设置对象颜色为白色
//搭建舞台 实例化渲染器对象renderer
vtkRenderer* renderer = vtkRenderer::New();
renderer->AddActor(coneActor);//将演员加入场景
renderer->SetBackground(0.0, 0.0, 1.0);//设置场景背景颜色为蓝色(R,G,B)
vtkLight* light = vtkLight::New();//实例化一个灯光对象
//light->SetSpecularColor(1.0, 0.0, 0.0);//设置镜面反射光颜色为Red
//light->SetDiffuseColor(0.0, 1.0, 0.0);//设置散射光为Green
light->SetColor(1.0, 0.0, 0.0);//设置环境光为红色
renderer->AddLight(light);//将灯光加入渲染器
//实例化一个照相机对象camera
//相对屏幕,x轴正方向:从左往右 y轴正方向:从下往上 z轴正方向:从里往外
//方法一:
vtkCamera *camera = vtkCamera::New();
camera->SetPosition(5.0,0.0,0.0);//照相机位置(x,y,z)
camera->SetFocalPoint(-1.0,0.0,0.0);//焦点方向
camera->SetViewUp(0.0,1.0,0.0);//线上向量
renderer->SetActiveCamera(camera);//设置我们创建的camera对象为活动的照相机
//方法二:
/*renderer->GetActiveCamera()->SetPosition(5.0, 0.0, 0.0);
renderer->GetActiveCamera()->SetFocalPoint(-1.0, 0.0, 0.0);
renderer->GetActiveCamera()->SetViewUp(0.0, 1.0, 0.0);*/
//实例化一个窗口对象renWin
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->SetSize(400, 200);//设置窗口大小宽*高
renWin->AddRenderer(renderer);//将场景renderer加入renWin窗口中
//实例化一个交互对象
vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::New();//交互对象加入renWin窗口中
interactor->SetRenderWindow(renWin);
renWin->Render();//绘制舞台上的东西
interactor->Initialize();//交互对象初始化
interactor->Start();//开始交互事件
//释放内存
cone->Delete();
coneActor->Delete();
coneMapper->Delete();
renderer->Delete();
renWin->Delete();
interactor->Delete();
light->Delete();
camera->Delete();
return 0;
}
相机绕着焦点旋转:
焦点绕着相机旋转: