使用VTK绘制手模型
通过自定义Leap Motion捕捉到的25点的位置(并没有全部使用所有点),使用vtkLineSource类和vtkSphereSource类进行手模型的线条绘制,在每个点的位置定义一个vtkSphereSource,点与点之间的线使用vtkLineSource连接。
手骨骼模型图
代码:
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include<vtkInteractorStyleTrackballCamera.h>
#include <vtkInteractorStyleTrackballActor.h>
#include <vtkAutoInit.h>
#include <vtkLineSource.h>
#include <vtkNew.h>
using namespace std;
auto createball(float x, float y, float z, int r)
{
vtkNew<vtkSphereSource> sphereSource;
sphereSource->SetCenter(x, y, z);
sphereSource->SetRadius(r);
sphereSource->Update();
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(sphereSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
mapper->ScalarVisibilityOff();
actor->GetProperty()->SetColor(255,255,0);//设置小球颜色
return actor;
}
auto createline(double x1, double y1, double z1, double x2, double y2, double z2)
{
vtkNew<vtkLineSource> lineSource;
lineSource->SetPoint1(x1, y1, z1);
lineSource->SetPoint2(x2, y2, z2);
lineSource->Update();
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(lineSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
mapper->ScalarVisibilityOff();
actor->GetProperty()->SetLineWidth(55);
actor->GetProperty()->SetColor(1,