文章目录

  • 1、VTK介绍
  • 2、实例

1、VTK介绍

输入数据(Source),对数据进行滤波(Filter)操作,然后对数据进行映射(vtkMapper),将其封装成一个对象(vtkActor),再将这个对象添加到渲染场景(vtkRenderer)中,再利用渲染窗口(vtkRenderWindow)中进行渲染展示。

现在整个剧院就相当于一个vtk中渲染窗口vtkRenderWindow,舞台就是渲染场景vtkRenderer,演员就是一个个对象vtkActor,他们不同的容貌、服装等这些属性统称为vtkProperty,我们观众和演员的互动就是vtkRenderWindowInteractor,我们送花、拥抱、握手等这些就是交互的风格vtkInteractorStyle,舞台上的灯光就是vtkLight,每个观众的眼睛就是vtkCamera,由于我们每个观众看到的东西都是唯一的所以vtkCamera只有一个,但是灯光vtkLight却可以是多个的。

2、实例


QtVTKTest.h

#pragma once
#include <QtWidgets/QWidget>
#include "ui_QtVTKTest.h"
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkOutputWindow.h>
#include <vtkSmartPointer.h>
#include <vtkImageViewer2.h>
#include <vtkJPEGReader.h>
#include <vtkPNGReader.h>
#include <vtkTIFFReader.h>
#include <vtkBMPReader.h>
#include <vtkDICOMImageReader.h>
#include <vtkNamedColors.h>
#include <vtkFloatArray.h>
#include <array>
#include <vtkPolyDataMapper.h>
#include <vtkCellArray.h>
#include <vtkCellArray.h>
#include <vtkCamera.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkRenderer.h>
#include <vtkPolyDataMapper.h>
#include <vtkNew.h>
#include<vtkConeSource.h>
#include<vtkPolyDataMapper.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkInteractorStyleTrackballCamera.h>
#include <vtkLight.h>
#include <vtkCubeSource.h>
#include <vtkTriangleFilter.h>
#include <vtkMassProperties.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkSphereSource.h>
#include <vtkTransform.h>
#include <vtkAxesActor.h>
#include <vtkCylinderSource.h>
#include "vtkInteractorStyleTrackballCamera.h"
#include <vtkTexture.h>
#include <vtkBMPReader.h>
#include <vtkImageViewer2.h>
#include <vtkEventQtSlotConnect.h>
#include <qdebug.h>
#include <vtkAxesActor.h>class QtVTKTest : public QWidget
{Q_OBJECTpublic:QtVTKTest(QWidget *parent = Q_NULLPTR);void renderImg();void VTKWidget5();void VTKWidget6();void VTKWidget7();public slots://响应鼠标移动的消息,实时输出鼠标的当前位置  void updateCoords(vtkObject* obj);private:Ui::QtVTKTestClass ui;
};

QtVTKTest.cpp

#include "QtVTKTest.h"QtVTKTest::QtVTKTest(QWidget *parent): QWidget(parent)
{vtkOutputWindow::SetGlobalWarningDisplay(0);//不弹出vtkOutputWindow窗口ui.setupUi(this);renderImg();VTKWidget5();VTKWidget6();VTKWidget7();
}void QtVTKTest::renderImg()
{// bmp图片vtkSmartPointer<vtkBMPReader> render = vtkSmartPointer<vtkBMPReader>::New();render->SetFileName("C:\\Users\\Administrator\\Desktop\\N\\1.bmp");render->Update();vtkSmartPointer<vtkImageViewer2> viewer = vtkSmartPointer<vtkImageViewer2>::New();viewer->SetInputData(render->GetOutput());viewer->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());viewer->Render();// jpg图片vtkSmartPointer<vtkJPEGReader> render1 = vtkSmartPointer<vtkJPEGReader>::New();render1->SetFileName("C:\\Users\\Administrator\\Desktop\\新建文件夹\\111.jpg");render1->Update();vtkSmartPointer<vtkImageViewer2> viewer1 = vtkSmartPointer<vtkImageViewer2>::New();viewer1->SetInputData(render1->GetOutput());viewer1->SetRenderWindow(ui.qvtkWidget_2->GetRenderWindow());viewer1->Render();// PNG图片vtkSmartPointer<vtkPNGReader> render2 = vtkSmartPointer<vtkPNGReader>::New();render2->SetFileName("C:\\Users\\Administrator\\Desktop\\新建文件夹\\111.png");render2->Update();vtkSmartPointer<vtkImageViewer2> viewer2 = vtkSmartPointer<vtkImageViewer2>::New();viewer2->SetInputData(render2->GetOutput());//viewer2->SetRenderWindow(ui.qvtkWidget_3->GetRenderWindow());//viewer2->Render();// ConeSource// 创建圆锥模型 Source// 输入数据(Source)-> 对数据进行滤波(Filter)操作 -> 然后对数据进行映射(vtkMapper)->// 将其封装成一个对象(vtkActor)->将这个对象添加到渲染场景(vtkRenderer)中,再利用渲染窗口->(vtkRenderWindow)中进行渲染展示。vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();cone->SetHeight(3.0);cone->SetRadius(1.0);cone->SetResolution(10.0);cone->SetCenter(2, 2, 2);// 映射器 MappervtkSmartPointer<vtkPolyDataMapper> coneMapper = vtkSmartPointer<vtkPolyDataMapper>::New();coneMapper->SetInputConnection(cone->GetOutputPort());// 对象 ActorvtkSmartPointer<vtkActor> coneActor = vtkSmartPointer<vtkActor>::New();coneActor->SetMapper(coneMapper);// 添加坐标轴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> coneRender = vtkSmartPointer<vtkRenderer>::New();coneRender->AddActor(coneActor);coneRender->AddActor(actor2);coneRender->SetBackground(0.0, 0.5, 0.5);// 加入灯光,灯光肯定不是唯一的,是可以存在多个的。首先我们先实例化一个灯光,灯光颜色设置为绿色、位置在(0,0,1)//加入灯光//**灯光1vtkSmartPointer<vtkLight> light1 = vtkSmartPointer<vtkLight>::New();light1->SetColor(0, 1, 0);//设置灯光颜色为绿色light1->SetPosition(0, 0, 1);//设置灯光的位置light1->SetFocalPoint(coneRender->GetActiveCamera()->GetFocalPoint());//设置灯光的焦点coneRender->AddLight(light1);//将其添加到渲染场景中//**灯光2vtkSmartPointer<vtkLight>light2 = vtkSmartPointer<vtkLight>::New();light2->SetColor(1, 0, 0);light2->SetPosition(0, 0, -1);light2->SetFocalPoint(coneRender->GetActiveCamera()->GetFocalPoint());coneRender->AddLight(light2);//相机//**方法一//vtkSmartPointer<vtkCamera>camera = vtkSmartPointer<vtkCamera>::New();//camera->SetPosition(0, 5, 0);//camera->SetFocalPoint(0, 0, 0);//camera->SetViewUp(0, 0, 0.5);//coneRender->SetActiveCamera(camera);// 方法二(使用自带的相机进行设置)coneRender->GetActiveCamera()->SetPosition(0,5,0);coneRender->GetActiveCamera()->SetFocalPoint(0, 0, 0);coneRender->GetActiveCamera()->SetViewUp(0, 0, 0.5);coneRender->ResetCamera();// 渲染窗口vtkSmartPointer<vtkRenderWindow> coneWin = vtkSmartPointer<vtkRenderWindow>::New();coneWin->AddRenderer(coneRender);ui.qvtkWidget_3->SetRenderWindow(coneWin);}void QtVTKTest::VTKWidget5()
{// 数据vtkSmartPointer<vtkSphereSource> sphereSource =    vtkSmartPointer<vtkSphereSource>::New();sphereSource->SetCenter(0.1, 0.1, 0.1);sphereSource->SetRadius(0.5);// 映射器vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();sphereMapper->SetInputConnection(sphereSource->GetOutputPort());// 演员vtkSmartPointer<vtkActor> sphereActor =vtkSmartPointer<vtkActor>::New();sphereActor->SetMapper(sphereMapper);// 渲染vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(sphereActor);renderer->SetBackground(0.0, 0.6, 0.6);// 窗口vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);ui.qvtkWidget_4->SetRenderWindow(renderWindow);}void QtVTKTest::VTKWidget6()
{// Source(生成一个中心在渲染场景原点圆柱体、并设置高,半径,柱体横截面的等边多边形的边数)vtkSmartPointer<vtkCylinderSource> cylinder =  vtkSmartPointer<vtkCylinderSource>::New();cylinder->SetHeight(3.0);cylinder->SetRadius(1.0);cylinder->SetResolution(10);// 映射器(渲染多边形几何数据,将输入的数据转成几何图元)vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());// 演员 (派生自vtkProp类,渲染场景中数据的可视化)vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();cylinderActor->SetMapper(cylinderMapper);// 加载PNG图片vtkSmartPointer<vtkPNGReader>pngReader = vtkSmartPointer<vtkPNGReader>::New();pngReader->SetFileName("C:\\Users\\Administrator\\Desktop\\新建文件夹\\111.png");vtkSmartPointer<vtkTexture>texture = vtkSmartPointer<vtkTexture>::New();texture->SetInputConnection(pngReader->GetOutputPort());texture->InterpolateOn();// Actor贴纹理图cylinderActor->SetTexture(texture);// 渲染(负责管理场景的渲染过程)vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(cylinderActor);renderer->SetBackground(0.1, 0.2, 0.4);// 设置灯光vtkSmartPointer<vtkLight> myLight = vtkSmartPointer<vtkLight>::New();myLight->SetColor(0, 1, 0);myLight->SetPosition(0, 0, 1);myLight->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());renderer->AddLight(myLight);vtkSmartPointer<vtkLight> myLight2 = vtkSmartPointer<vtkLight>::New();myLight2->SetColor(0, 0, 1);myLight2->SetPosition(0, 0, -1);myLight2->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());renderer->AddLight(myLight2);// (操作系统与VTK渲染引擎连接到一起,可以有多个vtkRenderer对象)ui.qvtkWidget_5->GetRenderWindow()->AddRenderer(renderer);//vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();//renWin->AddRenderer(renderer);//vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();//iren->SetRenderWindow(renWin);//vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();//iren->SetInteractorStyle(style);//iren->Initialize();//iren->Start();
}void QtVTKTest::VTKWidget7()
{vtkSmartPointer< vtkImageViewer2 > m_pImageViewer = vtkSmartPointer< vtkImageViewer2 >::New();vtkSmartPointer< vtkRenderer > m_pRenderder = vtkSmartPointer< vtkRenderer >::New();// 设置m_QVTKWidget的渲染器  vtkSmartPointer<vtkPNGReader>pngReader = vtkSmartPointer<vtkPNGReader>::New();pngReader->SetFileName("C:\\Users\\Administrator\\Desktop\\新建文件夹\\111.png");pngReader->Update();// 将reader的输出作为m_pImageViewer的输入,并设置m_pImageViewer与渲染器m_pRenderer的关联m_pImageViewer->SetInputData(pngReader->GetOutput());m_pImageViewer->SetRenderWindow(ui.qvtkWidget_6->GetRenderWindow());m_pImageViewer->Render();vtkEventQtSlotConnect* m_Connections = vtkEventQtSlotConnect::New();m_Connections->Connect(ui.qvtkWidget_6->GetRenderWindow()->GetInteractor(),vtkCommand::MouseMoveEvent,this,SLOT(updateCoords(vtkObject*)));
}void QtVTKTest::updateCoords(vtkObject* obj)
{// 获取交互器vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::SafeDownCast(obj);// 获取鼠标的当前位置int event_pos[2];iren->GetEventPosition(event_pos);QString str;str.sprintf("x=%d : y=%d", event_pos[0], event_pos[1]);qDebug() << str;//m_StatusBar->showMessage(str);
}

QT5.9 VTK8.2 基础学习(1)相关推荐

  1. 【转】oracle PLSQL基础学习

    [转]oracle PLSQL基础学习 --oracle 练习: /**************************************************PL/SQL编程基础****** ...

  2. python创建对象的格式为_Python入门基础学习(面向对象)

    python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  3. 虚幻引擎虚拟现实开发基础学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...

  4. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals

    如何分类--动画产业基础 大小解压后:6.2G 含课程素材 1920X1080 mp4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 信息: 绘画技巧.解剖学.角色设计.透视和整体讲故事--这门 ...

  5. Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender

    Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender Blender纹理基础学习视频教程 CGCookie – Funda ...

  6. ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...

  7. 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?

    原标题:零基础学习Python难不难?Python有什么优势? Python是一种计算机程序设计语言.首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个 ...

  8. 计算机一级ps2019,2019年计算机一级考试PS基础学习点子:PS菜单中英文对照表.docx...

    2019 年计算机一级考试 PS 基础学习点子: PS 菜单中英文对照表 PS菜单中英文对照表 一.File New 2.Open 3.Open As 4.Open Recent Close 6.Sa ...

  9. Java零基础学习难吗

    java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言.并不困难.如果你的学习能力比较高,那么你对Java的 ...

最新文章

  1. MDL估计算法程序C语言,MDLS算法浅谈
  2. ImageView 缩放
  3. 韩军为花荣的《操盘手》写的序,不错!很有枭雄味道
  4. Linux定期监视某文件变化,监控Linux文件变化,防止服务器被黑
  5. Nslookup 命令使用浅析
  6. php asciii 回车换行,ubuntu下关于telnet俩个特殊ascii字符回车0x0d与换行0x0a
  7. java kill 线程_java – 如何在等待中杀死正在运行的线程?
  8. yii学习笔记(6),数据库操作(增删改)
  9. Centos yum 命令行 安装KDE Desktop
  10. 软件工程2 需求获取
  11. bip动作捕捉_Mocap动作捕捉系列
  12. 三维扫描用于3D打印技术
  13. 基于Java的奖学金评定系统的设计
  14. 山寨手机给正规手机仅仅是冲突吗?相互学习,正规国产机就不愁翻身。
  15. Hermez官方文档翻译(四)开发者-SDK (有自己测试验证demo)
  16. 计算长方形的面积 周长 C语言,c语言计算长方形的面积和周长
  17. 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等)
  18. js多文件下载和多文件分文件夹打包下载并重命名
  19. java官网教程(基础篇)—— 新手入门
  20. 【Verilog闯关第2天】数字秒表的设计

热门文章

  1. 2020排行榜!Realworld前端框架的比较
  2. G711转AAC代码总结【转】
  3. win7 shutdown命令设置自动关机、休眠
  4. 视频编解码之熵编码简介
  5. STM32 PAJ7620U2手势识别模块(IIC通信)程序源码详解
  6. vue3前端js通过navigator.serial直接连接地磅仪串口显示重量
  7. 转载的socks4 socks5 rfc1928一大堆
  8. java ninja教程_ninja:一个简单的构建方式
  9. C语言easyx制作华容道游戏,huarongdao 用EasyX编写的华容道程序 - 下载 - 搜珍网
  10. tesseract-ocr识别中文扫描图片实例讲解 .