VTK案例学习03

废话不多说,贴上代码,贴上注释,一看便知。

代码一, 常规操作生成一个圆锥,界面添加坐标轴,并对其属性进行操作
#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:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值