系列文章
一、逆向工程
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模型