python三维图形渲染-基于 pygtk + vtk 实现三维数据可视化(一)
Gtk+ 与三维图形渲染
Gtk+ 虽然优秀,但我当初考虑使用它来做三维图形渲染窗口时,发现官方没有提供对 OpenGL 图形渲染的集成支持。同类 GUI 库,譬如 Qt 与 wxWidgets,官方提供了一个专门用于渲染 OpenGL 图形的 widget(窗口部件)。
Gtk+有一个第三方库 gtkglarea,实现了用于显示 OpenGL 图形的 widget,但是这个库年久失修,并且没有跟进 Gtk+ 2.x,现在这个项目已经死掉了。
取 gtkglarea 项目而代之的是 gtkglext 项目。与 gtkglarea 相比,gtkglext 的实现更贴近于 gtk+ 的底层,从而也更灵活,可以让 gtk+ widget 从根本上兼容 OpenGL 图形渲染。我很奇怪为什么 gtk+ 官方不考虑将 gtkglext 并入 gtk+ 的标准组件中。
Gtk+ 与 VTK
虽然借助 gtkglext 库,gtk+ 程序可以很方便的实现 OpenGL 图形渲染,但是对基于 OpenGL 实现的高级三维图形渲染库 Vtk 的支持却很让人头疼。因为 Vtk 是 C++ 库,而 gtk+ 是 C 库,二者之间的对接很困难。
考虑到采用 C++ 语言对 C 库的实现进行封装,要比采用 C 语言来封装一个 C++ 库更方便。如果用 C++ 语言对 gtk+ 库进行封装,从而将 gtk+ 与 vtk 放在同一种编程语言环境中,这样就可以有效降低 gtk+ 与 vtk 对接难度。再考虑如果采用可以同时实现与 C/C++ 混合编程的第三种编程语言,譬如 Python,基于该语言分别对 gtk+ 库与 vtk 库进行封装,也可以将 gtk+ 与 vtk 放到同一种编程语言环境中。
其实我觉得 vtk 采用 C++ 来实现是很不高明的,虽然采用 C++ 可以提高编程效率,但是随之而来的问题是降低了库的灵活性。如果 vtk 的实现像 OpenGL 那样体现为平坦的 C 库,那么现在就可以很方便做 C++、Python、Java、ruby 等高级语言的封装了。这只是我的个人浅见,这种浅见主要来自于 gtk+ 的成功,看看现在 gtk+ 的那么多种语言绑定就知道 vtk 有多么笨重了。
总之,要多快好省地实现 Gtk+ 与 Vtk 的对接,就应当为它们营造一个均等的编程语言环境。既然 Vtk 是笨重的 C++ 库,那么这等重任应当落在 gtk+ 身上了,这就涉及到 gtk+ 的语言绑定。
基于 python 的 Gtk+ 与 vtk 库的对接
Gtk+ 2.x 是一套非常成熟的跨平台 GUI 开发库,采用 C 语言实现,但是通过对库接口的封装 (Wrapper) 可以实现与各种高级语言的灵活绑定 (binding),具体可参考 Gtk+ Bindings。目前应用比较广泛的 gtk+ Wrapper 是 gtkmm 与 pygtk,它们分别实现了 gtk+ 库接口的 c++ 绑定与 python 绑定。
当初我是从 C/C++ 开始学习编程的,但对 C++ 一向都心存畏惧,总也上升不到大牛们所谓的艺术高度。后来初次接触 python 时,一下子被其简洁明快的编程思想与风格深深地吸引住了。虽然一直都没怎么真正使用 python 写过程序,但是随着对 python 与 C 的混合编程能力的逐步了解,我对 C++ 残存的留恋也随风飘散了。用 C 来实现平坦的底层库,用 python 对库接口进行组装,这样即可满足程序的运行效率,又同时兼顾了程序实现效率。正是出于对 python 与 c 的信赖,我选择 pygtk 来做 GUI 程序,而不是 gtkmm。
对于本文所讨论的问题,即 gtk+ 与 vtk 的对接,由于 vtk 也提供了 python 绑定,这样基于 pygtk 与 vtk 的 python 绑定,再利用 gtkglext 库提供的 OpenGL 图形渲染功能,实现Gtk+ 与 vtk 库的对接就变得简单了。
python三维图形渲染-基于 pygtk + vtk 实现三维数据可视化(一)相关推荐
- Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析
Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析 文章目录 1.词云图简介 2.wordcloud库的安装 3.WordCloud的主要参数说明 4.绘制词 ...
- 【数据可视化】基于Dash制作的疫情数据可视化APP(Dash入门必读,附可运行源码)
基于Dash制作的疫情数据可视化APP 在此之前,我写过一篇博客<基于Streamlit制作的时间序列数据分析APP>.Streamlit的优点是上手简单.能在短时间内快速构建具有一定交互 ...
- Python计算美国总统的身高并实现数据可视化
Python计算美国总统的身高并实现数据可视化 代码如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt ...
- Python+Flask实现全国、全球疫情大数据可视化(二):网页页面布局+echarts可视化中国地图、世界地图、柱状图和折线图
文章目录 相关文章 一.实现效果 二.页面布局html+css main.html main.css 三.echarts图表制作 1.全国累计趋势折线图ec_l1.js 2.全国趋势变化折线图ec_l ...
- python爬取b站弹幕并进行数据可视化
python爬取b站弹幕并进行数据可视化 1.第一步,爬取b站弹幕 我们随便打开一个b站视频 打开开发者模式,在network下搜索list,可以找到该视频的弹幕文件 打开之后是这个样子的 结构还是比 ...
- python数据分析之连接MySQL数据库并进行数据可视化
大家好,我是带我去滑雪! 本期将熟悉MySQL数据库以及管理和操作MySQL数据库的数据库管理工具Navicat Premium,然后在python中调用MySQL数据库进行数据分析和数据可视化. 目 ...
- python 气泡图 聚类_2015年度10大Plotly数据可视化美图及工具介绍
文章整理出了2015年最优秀的十个Plotly图表,这些交互式的图表使用Plotly的web app和APIs制作而成. 第十位. "2001-2014对同性婚姻的支持" 这些Tu ...
- Python之数据分析(Numpy通用属性、数据可视化与matplotlib库通用函数)
文章目录 一.ndarray属性 二.数据可视化 一.ndarray属性 1.通用属性 dtype:数组类型 shape:数组维度 T:转置视图 ndim:维数(一维是1,二维是2,三维是3--) s ...
- 基于树莓派4b的传感器数据可视化实现
概述 实验的第二部分将5个传感器同时搭建在面包板,每一个模块建立一个文件,并且为每一个模块创建一个类.另外创建一个利用QT Designer设计生成的一个界面类.在主文件中实例化5个传感器的类,并且创 ...
最新文章
- Solr 搭建搜索服务器
- struts2的国际化(即实现网站整体中英文切换)实例
- 直接通过ADO操作Access数据库(修改版)
- mysql交换分区_对MySQL交换分区的实践
- 由中缀表达式计算前缀表达式
- java基本数据类型声明及初始化方法
- 基于javaweb的教师信息管理系统
- 高质量论文配图配色(附RGB值及16进制码)
- 每日一题-12.30-三态数据总线
- 互联网晚报 | 10月29日 星期五 | 理想汽车第10万辆整车正式下线;微博新增“炸毁评论”功能;《长津湖》续集正式官宣...
- Android第三方支付--微信支付
- 把电脑端的图片链接转换为API接口可以调用的链接
- mysql mysqldataadapter_MySQL的DataAdapter用法
- matlab 计算变异系数,变异系数法求权重matlab 代码
- JAVA如何读取系统环境变量?
- 免费轻量级网页播放器f4player, flv, f4v, mp4, stream, live stream, subscribed CDN
- 阿里云学习笔记——设置规则引擎(2)
- Cesium + Vue 加载天地图服务(二)
- Unity 计算图片真实存储大小(Preview视图)
- Human Brain Mapping:持续注意的个体差异与皮层厚度有关
热门文章
- 201771010106东文财《面向对象程序设计(java)》实验12
- Golang简单写文件操作的四种方法
- 部署一个完整的vue webpack项目
- js数组去重的四种方法
- GridView显示图片
- github snap android,GitHub - albuer/heapsnap: HeapSnap 是一个定位内存泄露的工具,适用于Android平台。...
- python基础语法 第0关print-重庆酉阳高校邦数据科学通识课【Python基础语法】答案...
- python程序员一天写多少行代码-这个工具,30分钟居然把我一天的工作给干完了!...
- python语言程序设计基础网课-宜昌2020年_高校邦_Python程序设计基础【实境编程】...
- python有趣代码-一个有意思的 Python 训练项目集