废话不多说,贴上代码,贴上注释,一看便知。
代码一, 常规操作生成一个圆锥,界面添加坐标轴,并对其属性进行操作
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkCommand.h"
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include "vtkSmartPointer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkLight.h"
#include "vtkAxesActor.h"
int main()
{
//定义素人的高度,还有素人中心点在坐标轴的位置
vtkConeSource* cone = vtkConeSource::New();
cone->SetHeight(10.0);
cone->SetRadius(3.0);
cone->SetResolution(10);
cone->SetCenter(4, 4, 4);
vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());
vtkActor* coneActor = vtkActor::New();
coneActor->SetMapper(coneMapper);
//设置对象颜色等属性的方法一,适用于设置多个演员的属性。
vtkSmartPointer<vtkProperty> coneP = vtkSmartPointer< vtkProperty>::New();
coneP->SetColor(1, 1, 0);
coneActor->SetProperty(coneP);
//设置对象颜色等属性的方法二
coneActor->GetProperty()->SetDiffuseColor(0.5, 0.5, 0.5);//此处设置的是散射颜色
//同理还有
//setOpacity(1); 设置不透明度
//setAmbient(0); 设置环境光照系数
//setSpecular(0); 设置镜面光系数
添加坐标轴
vtkSmartPointer<vtkAxesActor> actor2 =
vtkSmartPointer<vtkAxesActor>::New();
actor2->SetPosition(0, 0, 0);//设置中心点
actor2->SetTotalLength(2, 2, 2);//设置坐标轴长度
actor2->SetShaftType(0);
actor2->SetAxisLabels(0);//坐标轴方向x,y,z是否显示,内部为bool类型
actor2->SetCylinderRadius(0.02);//设置坐标轴宽度
vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();
ren1->AddActor(actor2);
ren1->AddActor(coneActor);
ren1->SetBackground(0, 1, 1);
设置渐变背景
ren1->SetBackground2(1, 1, 0);
ren1->GradientBackgroundOn();
ren1->ResetCamera();
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren1);
renWin->SetSize(800, 800);//设置画布大小
vtkSmartPointer<vtkLight> lt = vtkSmartPointer< vtkLight>::New();
lt->SetColor(0.01, 0.01, 0.01);//设置灯光效果
vtkSmartPointer<vtkCamera> ca = vtkSmartPointer<vtkCamera>::New();
ca->SetClippingRange(2, 4);//设置照相机焦点
//360读旋转展示图
int i;
for (i = 0; i < 360; ++i)
{
//render the image
renWin->Render();
// rotate the active camera by one degree
ren1->GetActiveCamera()->Azimuth(1);
}
//
Free up any objects we created
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
renWin->Delete();
return 0;
}
代码二,为一个球体贴图
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include "vtkSmartPointer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkBMPReader.h"
#include "vtkTexture.h"
#include "vtkTexturedSphereSource.h"
int main()
{
vtkSmartPointer<vtkBMPReader>reader = vtkSmartPointer<vtkBMPReader>::New();
//读入一张BMP二维格式图
reader->SetFileName("test.bmp");
vtkSmartPointer<vtkTexture>texture = vtkSmartPointer<vtkTexture>::New();
//将读入的图片传入texture
texture->SetInputConnection(reader->GetOutputPort());
texture->InterpolateOn();
//定义一个要贴图的球体,网上找的只有这个类的运行成功,类似vtkConeSource等不含textured字眼的类运行不成功,暂时不知道为什么
vtkSmartPointer<vtkTexturedSphereSource> sphere = vtkSmartPointer<vtkTexturedSphereSource>::New();
vtkSmartPointer<vtkPolyDataMapper>mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphere->GetOutputPort());
vtkSmartPointer<vtkActor>actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
//通过SetTexture函数将texture添加进actor
actor->SetTexture(texture);
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renW = vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor> renWI = vtkSmartPointer<vtkRenderWindowInteractor>::New();
ren->AddActor(actor);
ren->SetBackground(1, 1, 1);
renW->AddRenderer(ren);
renW->Render();
renWI->SetRenderWindow(renW);
renWI->Initialize();
renWI->Start();
return 0;
}
Appendix: