十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
VTK中常用控件介绍及如何实现圆锥体绘制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
创新互联公司服务项目包括神农架林区网站建设、神农架林区网站制作、神农架林区网页制作以及神农架林区网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,神农架林区网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到神农架林区省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
利用 VTK 进行绘制物体时,常用到的组件有下面几种,为了加深理解,VTK 把一个物体的渲染过程比喻成了一场演出(真的很形象):
vtkRenderWindow
: 绘制窗口,相当于用于表演的舞台场地;
vtkRenderer
— 涉及灯光,相机,actor 的绘制过程;相当于舞台上的整体表演效果;
vtkLight
— 灯源用于照明场景;
vtkCamera
— 定义视角,焦距,及场景的视觉属性,相当于观众的视野范围;
vtkActor
— 场景中渲染的对象,属性以及它在场景中的位置,绘制中展示的道具;相当于演出的演员和道具;
vtkProperty
修饰 vtkActor
的属性,包括颜色、透明度及灯光的属性(反射、折射效果),演出用到的灯光
vtkMapper
— vtkActor
的几何映射,绘制时需要把 vtkAcor
转化为几何属性才能进行绘制;多个 vtkActor
可以设置相同的 mapper
下图是对 VTK 在绘制效果中对各组件的标注:
进行物体绘制时,需要先提供源数据,对数据进行一系列操作(读取、格式转换、Filter图像处理),再转化为vtkMapper
,vtkActor
进行设置`vtkMapper
后,传入vtkRendener (
绘制器)中。
在进行代码实现时,如果没有定义vtkLight、vtkCamera
两个组件时,程序会自动创建这两个组件。
整体来说,VTK 的数据管道流向如下:
下面就利用代码来实现一个圆锥体的绘制,借助于 VTK 提供的一个类 vtkConeSource.h
#include
#include
#include
#include
#include
#include
#include
#include
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
int main()
{
vtkSmartPointer Cone = vtkSmartPointer::New();
vtkSmartPointer colors = vtkSmartPointer::New();
Cone->SetHeight(3.0);//Cone Height
Cone->SetRadius(1.0);//Cone Radius
Cone->SetResolution(9);//Cone faces
vtkSmartPointer coneMapper = vtkSmartPointer::New();
coneMapper->SetInputConnection(Cone->GetOutputPort());//Mapper data
vtkSmartPointer coneActor = vtkSmartPointer::New();
coneActor->SetMapper(coneMapper);
vtkSmartPointer coneRender = vtkSmartPointer::New();
coneRender->AddActor(coneActor);
coneRender->SetBackground(colors->GetColor3d("MidnightBlue").GetData());//Bachground color
vtkSmartPointer renWindow = vtkSmartPointer::New();
renWindow->AddRenderer(coneRender);
renWindow->SetSize(300, 300);//Size of Window;
for (auto i = 0; i < 360; ++i)
{
//render the image;
renWindow->Render();
//rotate the active camera by one degree
coneRender->GetActiveCamera()->Azimuth(1);
}
getchar();
return EXIT_SUCCESS;
}
最终的效果如下:
代码中对圆锥设置了几个参数:高度,底部半径,及包含面的个数(圆锥涉及的面的总个数);
VTK 除了头文件 vtkConeSource.h
提供圆锥数据以外,还有椭圆,正方体,圆环等数据对象。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。