Python+OpenGL 杂谈

系列文章

一、逆向工程
Sketchup 逆向工程(一)破解.skp文件数据结构
Sketchup 逆向工程(二)分析三维模型数据结构
Sketchup 逆向工程(三)软件逆向工程从何处入手
Sketchup 逆向工程(四)破解的乐趣 钩子 外挂 代码注入

二、OpenGL渲染模型
Python+OpenGL绘制3D模型(一)Python 和 PyQt环境搭建
Python+OpenGL绘制3D模型(二)程序框架PyQt5
Python+OpenGL绘制3D模型(三)程序框架PyQt6
Python+OpenGL绘制3D模型(四)绘制线段
Python+OpenGL绘制3D模型(五)绘制三角型
Python+OpenGL绘制3D模型(六)材质文件载入和贴图映射
Python+OpenGL绘制3D模型(七)制作3dsmax导出插件
Python+OpenGL 杂谈(一)

三、成果
疫情期间关在家里实在没事干,破解了Sketchup,成功做出可以读取并显示.skp文件的程序SuViewer

前言

Sketchup作为目前设计院最为流行的设计软件(非工程制图软件),深受设计师的喜爱,软件小巧,而功能强大,有不少为之开发的插件应运而生,不过呢,关于底层数据结构和工作原理相关的文章少之又少,本文意在填补一下这方面的空缺,通过逆向软件分析,展示软件内部奥秘。本文用到的工具:IDA Pro,Immunity Debugger,Visual Studio (逆向工程三件套)数据结构属于知识产权的核心机密:


在这里插入图片描述

文章目录

  • 系列文章
  • 前言
  • Python+OpenGL 杂谈(一)
  • 系列文章预告

Python+OpenGL 杂谈(一)

Qt是非常优秀的C++图形界面框架,面相对象的设计,可以跨平台,而且PyQt5对OpenGL有很好的整合,表现稳定。对于操持C语言和Python语言的人,用Python + Qt绝对是是非常不错的组合

开发GUI图形程序,用C++太低效,尤其到后期,想重构?还是算了吧,Python在代码的效率方面,同样的功能,代码量可以做到C++的10-20%,这么小的代码量,非常适合代码重构,优化程序结构,所以用C++开发一个大型3D软件,对个人来说几乎不现实,但是Python能做到这点

Python不需要编译,直接执行,调试,所以在整个开发过程中,重复的编译->调试->编译->测试,提高的速度,相比C++不是一点两点,IDE方面,我比较喜欢用Eric6,也是因为这个框架用起来非常流畅,尤其是调试/终止,响应速度比Java版的PyCharm快太多了,相比来说,PyCharm贴心的代码补全功能,对于我来说就不是那么必须,另外Eric6也是Python+Qt开发的

程序执行性能方面,Python肯定是偏弱,我一开始用Python的时候,先写了不少从Python调用的C库,还研究了Python的虚拟机已提高程序性能,那时候绘制个二维的股票K线图,都卡的不行,几乎不能用。

后来通过C库来加速程序的代码越用越少,甚至本来用C语言优化过的程序,都换回了Python,为什么呢?第一,优化过的代码,升级很麻烦,对软件改进是一大障碍,第二、Python之所以这么流行,有无数的优化性能的办法,根本不需要你去写C语言代码来优化。

其实对于Python绘图这种对性能要求比较高的应用,最好的方案就是用OpenGL加速,因为Qt里面的 GUI调用,都是软件模拟的,根本没有用到硬件加速,这主要也是Qt的跨平台特性限制的,绑定硬件加速,对操作系统的绑定就会越多,一旦上了OpenGL硬件加速,那性能快了不是一点两点

OpenGL有一个GLList的东西,把好绘制的图形分成块,打包在GLList中,这样所有的glVertex glColor 这种频率高的系统调用,全部会转成指令包上传到GPU中批量执行,这样就彻底解决了Python的性能瓶颈,还有,不要以为OpenGL只是用来做3D绘图的,那就大错特错了,其实股票K线这种2D图形,涉及到数据量很大,尤其是多屏显示要达到满意的性能,也必须通过OpenGL这样的硬件加速接口,还有EDA设计软件,CAD设计软件,等等,应用面非常广

OpenGL窗口,要绘制纯2D图形,只有设置投影矩阵方面不一样,另外用OpenGL绘制纯2D图形,在屏幕上像素一一对应方面会遇到麻烦,这主要是OpenGL计算投影矩阵的时候,0.0这样的浮点数会有浮点数误差的问题,会变成-0.0001这样的值,所以投影在屏幕上的2D图形,就会偏移一个像素,解决起来也很简单,把0.0这样的值,映射到0.5,就不会有任何问题了

Python的性能方面,有本书要看一下,《Python高性能编程》,如果真的读明白了,那么祝贺你,C语言可以暂时丢一边不用了,C和C++只有在跟硬件打交道的场合,诸如嵌入式领域,才非得用他不可。而实际上,我在做嵌入式和物联网项目,也渐渐不用C了,现在有了个新东西,MicroPython,专门用于单片机上的快速开发。而且Python是人工智能的主要语言载体,对于像树莓派,Jetson,开发这种智能硬件所需操持的语言,主要也是Python,这才是王道

系列文章预告

目标是一个完善的Viewer,能够显示Sketchup的.skp文件中的3D模型
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/305789.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui+vue2 input输入框限制只能输入数字

方法1 自定义表单校验 <el-form :model"Formdata" ref"formRef" :rules"nodeFormRules" label-width"100px"><el-form-itemlabel"年龄"prop"age"><el-input v-model.number"Formdata.age&q…

构建高效数据中台:集群规划与搭建的最佳实践指南

架构设计 Rack(机架)配置建议 大数据集群规划 安装细节见配套文档 两地三中心 两地三中心是一种信息技术架构模式,通常用于灾难恢复和业务连续性计划。这种模式设计有两个物理位置(两地),在这两个位置上部署了三个数据中心(三中心):一个主数据中心和两个备份数据中心…

FLV视频测试URL地址

✍️作者简介&#xff1a;小北编程&#xff08;&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助…

Python跳动的爱心完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

代码随想录算法训练营第三十天|332.重新安排行程、51. N皇后 、37. 解数独

332.重新安排行程 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 文档讲解&#xff1a;代码随想录 C代码&#xff1a; class Solution { public: unordered_map<string, map<string, int>> targets;bool backtrack…

响应式绑定<a-textarea>的内容

项目中的 <a-textarea>组件需要自动填入下方数据表的物品名称数量单位&#xff0c;效果如下&#xff1a; 尝试 <a-textarea>{{插值}}</a-textarea>&#xff0c;实现不了&#xff0c;问ai得知需要使用v-decorator 指令的initialValue 属性 问&#xff1a; 如何…

通过Fiddler肆意修改接口返回数据进行测试

方法介绍与比对 在测试的过程中&#xff0c;有的需求是这样的&#xff0c;它需要你修改接口返回的数据&#xff0c;从而检查在客户端手机app内是否显示正确&#xff0c;这也算是一种接口容错测试&#xff0c;接口容错测试属于app性能&#xff08;专项&#xff09;测试的其中一种…

使用Rust发送邮件

SMTP协议与MIME协议 SMTP&#xff08;简单邮件传输协议,Simple Mail Transfer Protocol&#xff09;是一种用于发送和接收电子邮件的互联网标准通信协议。它定义了电子邮件服务器如何相互发送、接收和中继邮件。SMTP 通常用于发送邮件&#xff0c;而邮件的接收通常由 POP&#…

leaflet学习笔记-地图图层控制(二)

图层介绍 Leaflet的地图图层控件可控制两类图层&#xff1a;一类是底图图层&#xff08;Base Layers&#xff09;&#xff0c;一次只能选择一个图层作为地图的背景图层&#xff0c;即底图图层&#xff0c;在地图图层控件中用单选按钮控制&#xff1b;另一类是覆盖图层&#xff…

UG NX二次开发(C++)-通过两点和高度创建长方体

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、采用UFun函数来创建长方体3、采用NXOpen方法实现两点和高度创建长方体4、验证1、前言 在UG NX二次开发时,我们通常会采用ufun函数来完成功能的开发,但是有些功能在ufun函数中不能找到…

Github项目推荐:KaTeX

项目地址 GitHub - KaTeX/KaTeX: Fast math typesetting for the web. 项目描述 这是一个渲染公式的JavaScript库。有时候可能网页中需要写一些公式&#xff0c;但html本身并没有提供相应的标签。这个时候这个库就能派上用场了。 项目截图

K8S的dashboard使用token登录

原文网址&#xff1a;K8S的dashboard使用token登录-CSDN博客 简介 本文介绍K8S的dashboard如何使用token登录。 Dashboard 支持 Kubeconfig 和 Token 两种认证方式&#xff0c;这里测试 Token 认证方式登录。 1.创建权限配置文件 创建一个配置文件&#xff1a;dashboard-u…