這本書中的例子是按部就班的,第二個例子比第一個例子多加了相機功能。
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);
}