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 实现三维数据可视化(一)相关推荐

  1. Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析

    Python基于WordCloud词云图的数据可视化分析 词云图的基本使用 政府工作报告分析 文章目录 1.词云图简介 2.wordcloud库的安装 3.WordCloud的主要参数说明 4.绘制词 ...

  2. 【数据可视化】基于Dash制作的疫情数据可视化APP(Dash入门必读,附可运行源码)

    基于Dash制作的疫情数据可视化APP 在此之前,我写过一篇博客<基于Streamlit制作的时间序列数据分析APP>.Streamlit的优点是上手简单.能在短时间内快速构建具有一定交互 ...

  3. Python计算美国总统的身高并实现数据可视化

    Python计算美国总统的身高并实现数据可视化 代码如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt ...

  4. Python+Flask实现全国、全球疫情大数据可视化(二):网页页面布局+echarts可视化中国地图、世界地图、柱状图和折线图

    文章目录 相关文章 一.实现效果 二.页面布局html+css main.html main.css 三.echarts图表制作 1.全国累计趋势折线图ec_l1.js 2.全国趋势变化折线图ec_l ...

  5. python爬取b站弹幕并进行数据可视化

    python爬取b站弹幕并进行数据可视化 1.第一步,爬取b站弹幕 我们随便打开一个b站视频 打开开发者模式,在network下搜索list,可以找到该视频的弹幕文件 打开之后是这个样子的 结构还是比 ...

  6. python数据分析之连接MySQL数据库并进行数据可视化

    大家好,我是带我去滑雪! 本期将熟悉MySQL数据库以及管理和操作MySQL数据库的数据库管理工具Navicat Premium,然后在python中调用MySQL数据库进行数据分析和数据可视化. 目 ...

  7. python 气泡图 聚类_2015年度10大Plotly数据可视化美图及工具介绍

    文章整理出了2015年最优秀的十个Plotly图表,这些交互式的图表使用Plotly的web app和APIs制作而成. 第十位. "2001-2014对同性婚姻的支持" 这些Tu ...

  8. Python之数据分析(Numpy通用属性、数据可视化与matplotlib库通用函数)

    文章目录 一.ndarray属性 二.数据可视化 一.ndarray属性 1.通用属性 dtype:数组类型 shape:数组维度 T:转置视图 ndim:维数(一维是1,二维是2,三维是3--) s ...

  9. 基于树莓派4b的传感器数据可视化实现

    概述 实验的第二部分将5个传感器同时搭建在面包板,每一个模块建立一个文件,并且为每一个模块创建一个类.另外创建一个利用QT Designer设计生成的一个界面类.在主文件中实例化5个传感器的类,并且创 ...

最新文章

  1. Solr 搭建搜索服务器
  2. struts2的国际化(即实现网站整体中英文切换)实例
  3. 直接通过ADO操作Access数据库(修改版)
  4. mysql交换分区_对MySQL交换分区的实践
  5. 由中缀表达式计算前缀表达式
  6. java基本数据类型声明及初始化方法
  7. 基于javaweb的教师信息管理系统
  8. 高质量论文配图配色(附RGB值及16进制码)
  9. 每日一题-12.30-三态数据总线
  10. 互联网晚报 | 10月29日 星期五 | 理想汽车第10万辆整车正式下线;微博新增“炸毁评论”功能;《长津湖》续集正式官宣...
  11. Android第三方支付--微信支付
  12. 把电脑端的图片链接转换为API接口可以调用的链接
  13. mysql mysqldataadapter_MySQL的DataAdapter用法
  14. matlab 计算变异系数,变异系数法求权重matlab 代码
  15. JAVA如何读取系统环境变量?
  16. 免费轻量级网页播放器f4player, flv, f4v, mp4, stream, live stream, subscribed CDN
  17. 阿里云学习笔记——设置规则引擎(2)
  18. Cesium + Vue 加载天地图服务(二)
  19. Unity 计算图片真实存储大小(Preview视图)
  20. Human Brain Mapping:持续注意的个体差异与皮层厚度有关

热门文章

  1. 201771010106东文财《面向对象程序设计(java)》实验12
  2. Golang简单写文件操作的四种方法
  3. 部署一个完整的vue webpack项目
  4. js数组去重的四种方法
  5. GridView显示图片
  6. github snap android,GitHub - albuer/heapsnap: HeapSnap 是一个定位内存泄露的工具,适用于Android平台。...
  7. python基础语法 第0关print-重庆酉阳高校邦数据科学通识课【Python基础语法】答案...
  8. python程序员一天写多少行代码-这个工具,30分钟居然把我一天的工作给干完了!...
  9. python语言程序设计基础网课-宜昌2020年_高校邦_Python程序设计基础【实境编程】...
  10. python有趣代码-一个有意思的 Python 训练项目集