前言

一场疫情打乱了好多人的节奏,我也一样,一不留神半年都快过去了,这期间虽说一直在鼓捣东西吧,不过确实是没啥实质性的进展,索性就继续把vtk的使用来完善下吧。

vtkRenderer

vtk的基类,也就是所有类基本继承于vtkObjectBase,Renderer也是一样,看下图,其实看源码挺好的,可以学习学习别人的思想,借鉴下充实自己。

vtkRenderer个人理解就是个窗口渲染器,也是vtk的核心,没了这玩意儿你没法去操作你的vtkActor,你的vtkInteractorStyle也没有挂载区域,具体的介绍也不多说,看资料看文档吧(我也不会-,-||)。

引入vtk窗口

在上一篇,工程到了能正常运行的地步,但是没有引入vtk相关的,接下来就是把vtk窗口放置到自己的qt工程的时间了。

之前的配置中已经提到这个QVTKWidget,也就是vtk的窗口,至于怎么拖拖到哪看你自己,不会的可以先鼓捣下单纯的qt吧。

保存之后,我们先来运行程序看下效果,如果不出意外的话会跟我这显示的一样。

我们来看下输出的信息。

vtk的新版本不再是QVTKWidget,也就是说这玩意儿没了,一番找资料后发现,哦,原来是改名字了,新版本改成了QVTKOpenGLWidget,更改ui文件后我们再来运行程序。

可以看到图中的vtkOutputWindow,这个窗口是vtk内置的错误信息弹框,也就是说有异常的时候回给你输出信息提示,但其实你在输出一样能看到只是没有这个直观而已。

回头看这个异常信息,也就是说没有重写vtkxxx,没有绑定事件机制什么的,我们在头文件加上下面这几句。

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);

错误是解决了,不过这个窗口黑压压的也不知道是干啥的,不用急我们来一段Demo。

	vtkSmartPointer<vtkConeSource> coneSource =
vtkSmartPointer<vtkConeSource>::New();
coneSource->Update(); vtkSmartPointer<vtkPolyData> polyData =
vtkSmartPointer<vtkPolyData>::New();
polyData = coneSource->GetOutput(); vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polyData); vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper); vtkSmartPointer<vtkRenderer> render =
vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
render->SetBackground(0.3, 0.3, 0.3); ui.qvtkWidget->GetRenderWindow()->AddRenderer(render); vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
rwi->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());
rwi->Initialize();

接下来简单介绍下上面这段的意思,首先我们要先了解下opengl,大致知道模型从点到面到成像的过程,opengl教程地址

首先我们创建一个Source,也就是点,面数据,通过DataMapper整理映射,然后Actor是模型的实体,至于Renderer就不多说了,RenderWindowInteractor是事件交互集合,也就是默认的交互事件。

引入对应的头文件之后,运行项目,不出意外的话就是下面的效果。

小结

真是不看不知道,竟然大半年都快过去了,这个学习记录好久也没更新了,但是在这段时间鼓捣的东西确实不少,回头整理整理,下一步先整理下vtkCamera这个相机的玩意儿。

vtk学习记录(三)——初识vtkRenderer的更多相关文章

  1. [20190620]日常学习记录(三)-初识promise及vuex

    在学习promise之前重温了Ajax的原生js实现, 在原生js中发送一个http请求首先new XMLHttpRequest() 然后定义状态变更事件 浏览器监听请求的状态,触发不同状态下相应的代 ...

  2. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  3. JavaScript学习记录三

    title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  4. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  5. leveldb 学习记录(三) MemTable 与 Immutable Memtable

    前文: leveldb 学习记录(一) skiplist leveldb 学习记录(二) Slice 存储格式: leveldb数据在内存中以 Memtable存储(核心结构是skiplist 已介绍 ...

  6. 【Android】学习记录<1> -- 初识ffmpeg

    工作需要用到ffmpeg来进行Android的软编码,对这玩意儿一点都不了解,做个学习记录先. FFmpeg:http://www.ffmpeg.org Fmpeg is the leading mu ...

  7. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

  8. 下页小希学MVC5+EF6.2 学习记录三

      目的:1 学习mvc+ef 2  写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...

  9. ES6深入学习记录(三)编程风格

    今天学习阮一峰ES6编程风格,其中探讨了如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 v ...

随机推荐

  1. 散列表和JAVA中的hash

    引文 hello,今天写的数据结构是散列表(hash表),也算是一种基础数据结构了吧.学过计算机的人大概都能说出来这是个以空间换时间的东西,那么具体怎么实现的是今天要讨论的问题. 为什么需要它?主要还 ...

  2. 实体识别中,或序列标注任务中的维特比Viterbi解码

    看懂这个算法,首先要了解序列标注任务     QQ522414928 可以在线交流 大体做一个解释,首先需要4个矩阵,当然这些矩阵是取完np.log后的结果, 分别是:初始strat→第一个字符状态的 ...

  3. JDBC 工具类封装

    每次使用jdbc 我们都要 加载驱动类 创建链接 创建Statement 接口对象执行sql 关闭资源 按照这样的套路可以封装一些重用代码方便在其他方法中调用 package com.xzlf.jdb ...

  4. 链表数据-PHP的实现

    首先,链表数据的结构是: 其次,链表数据的结构特点: 随后,填充链表结构: 链表结构的数据,从链表尾部塞入数据. 最后,删除链表结构:

  5. 关于join on 和单表查询的实时效果

    当数据量大(10W单位级)的时候,join的优势,会被单表查询超过. 以下是两张表单查和两张表联查的时间对比,同时,这样的记录有局限性的. 一.数据量少时: 单表查: 表一:显示行 0 - 2 ( 3 ...

  6. 使用STM8S i2c对TPS65987寄存器进行读写

    上图是TPS65987的i2c读写协议,和标准i2c协议有点出入,不过也不难理解,在读的时候i2c slave在发送数据过来之前会先发送1byte数据表示后面会有几个字节数据过来,在写的时候i2c h ...

  7. 基于centos7搭建kvm

    其他的和安装一般的系统没有差别 安装完成后. 1]使用ping www.baidu.com 2]修改静态ip,也可以不修改 3]下载brctlyum -y install bridge-utils 4 ...

  8. Spring框架中文件目录遍历漏洞 Directory traversal in Spring framework

    官方给出的描述是Spring框架中报告了一个与静态资源处理相关的目录遍历漏洞.某些URL在使用前未正确加密,使得攻击者能够获取文件系统上的任何文件,这些文件也可用于运行SpringWeb应用程序的进程 ...

  9. iterm2终端manpage高亮显示

    iterm2 据说是macOS平台上最好用的终端工具,今天下载来用了一下,发现确实很好.但是在使用man命令显示manpage的时候,颜色配置不是很让人满意,就像下面这样: 其实这样也是不错的,但是用 ...

  10. 一个页面从输入url到页面加载完成究竟经历了些什么

    本人经参考谢希仁著<计算机网络(第 5版)>.<HTTP权威指南>和网络上关于浏览器渲染原理的介绍,结合自己理解,整理出以下结论,如有不正确或者不完善之处欢迎指正: 当用户在浏 ...