使用VTK讀入點雲文件的基礎代碼:
頭文件:
也許不是全部都用到,爲了接下來得工程還是全部都包含進去了
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSphereSource.h"
#include "vtkShrinkFilter.h"
#include "vtkElevationFilter.h"
#include "vtkDataSetMapper.h"
#include "vtkActor.h"
#include "vtkCullerCollection.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkPolyVertex.h"
#include "vtkUnstructuredGrid.h"
#include <iostream>
#include "vtkPolyDataMapper.h"
#include "vtkScanPointReader.h"
#include "vtkProperty.h"
main部分:
//讀取點雲數據
void main()
{
FILE *fp = NULL;
fp = fopen( "C:\\test.sp", "r");
if ( fp == NULL)
{
printf("Error in open file test.sp\n");
getchar();
exit(-1);
}else
printf("open scan point success\n");
vtkRenderer *ren = vtkRenderer::New();
double arr[3] = {0};
vtkPoints *points = vtkPoints::New();
int n = 0;
while(!feof(fp))//首先讀取點雲數據到點表points同時指定點對應的id:
{
int ret=fscanf(fp,"%lf %lf %lf",&arr[0],&arr[1],&arr[2]);
if(ret!=3)
break;
points->InsertPoint(n,arr[0],arr[1],arr[2]);
n++;
}
printf("%d\n", n);
fclose(fp);
vtkPolyVertex *polyvertex = vtkPolyVertex::New();
polyvertex->GetPointIds()->SetNumberOfIds(n);
int i = 0;
for( i = 0;i < n; i++)//建立拓撲關係
{
polyvertex->GetPointIds()->SetId(i,i);
}
vtkUnstructuredGrid *grid = vtkUnstructuredGrid::New();
grid->SetPoints(points);
grid->InsertNextCell(polyvertex->GetCellType(),
polyvertex->GetPointIds());
vtkDataSetMapper *map1 = vtkDataSetMapper::New();
map1->SetInput(grid);
vtkActor *actor1 = vtkActor::New();
actor1->SetMapper(map1);
actor1->GetProperty()->SetColor(1,0, 0);
ren->AddActor(actor1);
ren->SetBackground(1, 1, 1);
vtkRenderWindow* win=vtkRenderWindow::New();
win->AddRenderer(ren);
win->SetSize(400,400);
win->BordersOn();
//On則運行起來將會是全屏顯示
//win->FullScreenOn();
//win->HideCursor();
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(win);
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
iren->Initialize();
iren->Start();
ren->Delete();
win->Delete();
iren->Delete();
}
運行結果:
本文使用的是 vs2005+vtk5.10.1
使用的是vs裏面的控制檯程序編寫。
這樣讀入點雲的方式是最原始的方式。