这本书中的例子是按部就班的,第二个例子比第一个例子多加了相机功能。
app
写程序代码以前的操做就不赘述了。下面直接从程序代码开始。spa
#include "vtkConeSource.h" #include "vtkRenderer.h" #include "vtkPolyDataMapper.h" #include "vtkCamera.h" #include "vtkActor.h" #include "vtkRenderWindow.h" int main() { vtkConeSource *cone= vtkConeSource::New(); cone->SetHeight(3.0); cone->SetResolution(10);; cone->SetRadius(1.0); vtkPolyDataMapper *coneMapper=vtkPolyDataMapper::New(); coneMapper->SetInputConnection(cone->GetOutputPort()); vtkActor *coneActor=vtkActor::New(); coneActor->SetMapper(coneMapper); vtkRenderer *ren1 = vtkRenderer::New(); ren1->AddActor(coneActor); ren1->SetBackground(0.1,0.2,0.4); vtkRenderWindow *renWin=vtkRenderWindow::New(); renWin->AddRenderer(ren1); renWin->SetSize(300,300); //每旋转1度渲染一次,共旋转360度 int i; for(i=0;i<360;i++) { renWin->Render(); //获取自动建立的相机对象并将其旋转1度 ren1->GetActiveCamera()->Azimuth(1); } return 0; }
2.代码解释code
本例比入门范例1多用了一个相机。因此头文件中多加了一个"vtkCamera.h"。orm
在本例的循环中,先是调用渲染器的方法GetActiveCamera()来获取自动建立的相机,而后调用相机的方法对象
Azimuth(1)
将镜头进行旋转。旋转的方式是将相机的位置绕着焦点位置上的视图垂直向量进行旋转。焦点的位置默认为坐标运点,相机位置默认在z轴,视图垂直向量默认为(0,1,00,所以相机是在xoz平面上旋转的。it
扩展:io
上例使用的是自动建立的相机,也能够实例化vtkCamera来手动建立一个相机,以后调用渲染器的方法SetActiveCamera()将相机选进渲染器中。入门
代码修改以下:class
vtkCamera *camera=vtkCamera::New();扩展
ren1->SetActiveCamera(camera);
//每旋转1度渲染一次,共旋转360度
int i;
for(i=0;i<360;i++)
{
renWin->Render();
//获取自动建立的相机对象并将其旋转1度
//ren1->GetActiveCamera()->Azimuth(1);
camera->Azimuth(1);
}
运行程序能够看到确实有旋转,可是图像是放大的,不如自带的效果好。因此,应该须要对相机的一些参数进行设置。具体的设置方式还要看后面对这个类的介绍。
2015.1.7 终于知道了为何这个图像是放大的了。是由于没有对相机进行重置:
进行以下修改就能够了:
vtkCamera *camera=vtkCamera::New();
ren1->SetActiveCamera(camera);
camera->SetPosition(1,1,1);
camera->SetFocalPoint(0,0,0);
camera->ComputeViewPlaneNormal();
ren1->ResetCamera();
//每旋转1度渲染一次,共旋转360度
int i;
for(i=0;i<360;i++)
{
renWin->Render();
//获取自动建立的相机对象并将其旋转1度
//ren1->GetActiveCamera()->Azimuth(1);
camera->Azimuth(1);
}