QT5.9 VTK8.2 基础学习(1)
文章目录
- 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)相关推荐
- 【转】oracle PLSQL基础学习
[转]oracle PLSQL基础学习 --oracle 练习: /**************************************************PL/SQL编程基础****** ...
- python创建对象的格式为_Python入门基础学习(面向对象)
python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...
- 虚幻引擎虚拟现实开发基础学习教程
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...
- 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals
如何分类--动画产业基础 大小解压后:6.2G 含课程素材 1920X1080 mp4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 信息: 绘画技巧.解剖学.角色设计.透视和整体讲故事--这门 ...
- Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender
Blender纹理基础学习视频教程 CGCookie – Fundamentals of Texturing in Blender Blender纹理基础学习视频教程 CGCookie – Funda ...
- ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course
ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...
- 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?
原标题:零基础学习Python难不难?Python有什么优势? Python是一种计算机程序设计语言.首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个 ...
- 计算机一级ps2019,2019年计算机一级考试PS基础学习点子:PS菜单中英文对照表.docx...
2019 年计算机一级考试 PS 基础学习点子: PS 菜单中英文对照表 PS菜单中英文对照表 一.File New 2.Open 3.Open As 4.Open Recent Close 6.Sa ...
- Java零基础学习难吗
java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言.并不困难.如果你的学习能力比较高,那么你对Java的 ...
最新文章
- MDL估计算法程序C语言,MDLS算法浅谈
- ImageView 缩放
- 韩军为花荣的《操盘手》写的序,不错!很有枭雄味道
- Linux定期监视某文件变化,监控Linux文件变化,防止服务器被黑
- Nslookup 命令使用浅析
- php asciii 回车换行,ubuntu下关于telnet俩个特殊ascii字符回车0x0d与换行0x0a
- java kill 线程_java – 如何在等待中杀死正在运行的线程?
- yii学习笔记(6),数据库操作(增删改)
- Centos yum 命令行 安装KDE Desktop
- 软件工程2 需求获取
- bip动作捕捉_Mocap动作捕捉系列
- 三维扫描用于3D打印技术
- 基于Java的奖学金评定系统的设计
- 山寨手机给正规手机仅仅是冲突吗?相互学习,正规国产机就不愁翻身。
- Hermez官方文档翻译(四)开发者-SDK (有自己测试验证demo)
- 计算长方形的面积 周长 C语言,c语言计算长方形的面积和周长
- 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等)
- js多文件下载和多文件分文件夹打包下载并重命名
- java官网教程(基础篇)—— 新手入门
- 【Verilog闯关第2天】数字秒表的设计
热门文章
- 2020排行榜!Realworld前端框架的比较
- G711转AAC代码总结【转】
- win7 shutdown命令设置自动关机、休眠
- 视频编解码之熵编码简介
- STM32 PAJ7620U2手势识别模块(IIC通信)程序源码详解
- vue3前端js通过navigator.serial直接连接地磅仪串口显示重量
- 转载的socks4 socks5 rfc1928一大堆
- java ninja教程_ninja:一个简单的构建方式
- C语言easyx制作华容道游戏,huarongdao 用EasyX编写的华容道程序 - 下载 - 搜珍网
- tesseract-ocr识别中文扫描图片实例讲解 .