周记:Sixteen

版权声明:听说这里让写版权声明~~~ https://blog.csdn.net/f_zyj/article/details/83215032

这周做了很重要的事情,花了大部分时间用来重构代码……

同时也深刻认识到只有足够的项目经验了以后,才会发现自己前期准备有多么不足。

因为一开始自己什么也不会,白纸一张,一边学一边做,导致很多功能都是学一点做一点而缺乏整体逻辑的认知。

在项目中,虽然现在流行模块化开发,但是个人感觉,这必须开发者对技术足够熟悉并且对项目需求足够了解,因为不同的模块之间对接所需要的具体需求会改变模块的开发逻辑。如果单纯的只考虑某一个模块,很有可能忽略了别的模块对他的特别需求,最后导致功能受限,轻者事倍功半,重者无法对接。

本周,我仔细审视了自己所写项目的需求,整理出来剩下三个核心功能与三个辅助功能需要实现,此时我已经对项目有了一定的了解,所以思考具体怎么处理这三个功能,然而这时才发现,因为之前模块的开发不够完善,使用的工具和库不够方便,导致接下来的开发会牵一发而动全身,也就是说,每增加一个功能,可能前边都要进行多处大面积修改,如果这样将就下去,无疑是给未来迭代带来巨大的麻烦,所以我决定再一次对其进行重构。

本次重构我也和总管讨论了一些,最后决定重构的重点有三:
一、CPUCPU 渲染改用 GPUGPU 渲染:
最初拿到项目时,只有一个类文件,里面的 OpenGLOpenGL 使用的是 CPUCPU 渲染,所以后边就一直沿用下去了,也没有什么问题,因为我的点云数据比较少。而总管开发的工具,每一帧都是三百多张点云渲染在同一帧,所以存在明显卡顿,故总管决定改用 GPUGPU 渲染。虽然我现在没有存在卡顿情况,但是为了长远考虑,决定使用 GPUGPU 渲染。
二、EigenEigen 改用 QMatrixQMatrix
起初不知道为什么,部门很多人使用的是 EigenEigen 数学库,并且使用 QtQt 开发也用的是 EigenEigen,我一直很纳闷儿,这周才终于知道了答案——总管不知道 QtQt 有专门的矩阵库。值得称赞的是,QtQt 的矩阵库功能极其强大,比 EigenEigen 好用很多,封装的特别完美,最重要的是开发文档十分详细,而 EigenEigen 的官方文档就显得有几分逊色。
三、点云的旋转平移缩放策略改变:
原本的策略是固定相机位置后统一在变换矩阵上改变,因为最开始是 CPUCPU 渲染,所以使用的变换矩阵是内置的两个固定的矩阵。其中相机位置存在 GL_PROJECTIONGL\_PROJECTION,而三种操作是存在 GL_MODELVIEWGL\_MODELVIEW 上,这并没有什么问题,加入外参以后,仍然是保存在 GL_MODELVIEWGL\_MODELVIEW 上,这依然没有什么问题,因为此时我们只需要考虑保存到矩阵,并不用考虑从矩阵中获取某种操作的数据。可是接下来要做的交互式功能,就不能简简单单的一股脑放在同一个矩阵了。交互式的功能需求是修改外参可以实时同步到点云上,通过选定某个或者某些点云进行平移旋转时,也要实时同步到外参上,这就要求与前边的整体平移旋转缩放策略分开,如果不分开,不仅在矩阵和外参的转换上存在麻烦,还有可能影响精度。故,决定将整体的三种操作放到 AA 矩阵,和参数相关的操作放到 BB 矩阵,然后将矩阵传给着色器(ShaderShader),在着色器内部让他们相乘即可。

这次重构,从写 BugBug 到调 BugBug,整整花了四天时间,项目虽然没有什么进展,但是移除了深藏已久诟病,为以后的深度优化带来了便捷,我觉得还是很划算的。同时,几次重构下来,时间的增长可怕至极。第一次重构只用了五分钟,第二次用了半晌,第三次重构用了一天,这是第四次,用了四天……这样充分的证明,前期的准备是多么重要,一定需要考虑好项目整体的逻辑与不同模块之间的需求。

剩下的一天,我很快的实现了三个辅助功能,一周也就这么过去了。

最近,我重新捡起了书本,来深圳几个月,总是想抽业余时间学习,但是发现只要一下班,回到家自己就不想学习,可能是心野了吧……但是不学习怎么进步?虽然工作也是学习,但是这毕竟是具有局限性的,不利于我综合能力的提升。比方说,我现在会 BASH SHELLBASH\ SHELL 脚本,但是我想学一下 PYTHON SHELLPYTHON\ SHELL 脚本。这个东西,学会了对我以后工作绝对有很大帮助,但是我现在不会并不影响我的工作,因为我会 BASH SHELLBASH\ SHELL,所以在工作时,学习它的优先级就会很低,在其他重要的东西没有搞定的时候,我就没有时间顾虑它,所以我只能抽业余时间来学习,来提升自己的综合能力。

为了避免自己回家就想打游戏看电影的毛病(毕竟我也是一个很普通的人),我决定每个工作日没有重要的事的时候,在公司逗留一两个小时用来看书学习,周末如果无聊的话,也去公司加班学习,在家里我真的没有太多的自觉啊,家里也没有太好的学习环境,比较拥挤(我这个人对学习环境比较苛刻,所以大学换了九个宿舍)。

对了,另外十分感谢任杰(网名:方寸)学长对我的照顾,虽然和任杰学长认识很久了,三年了,但是接触并不多,但是他一直比较看好我,对我照顾有加,之前去快手就是他关照的,现在他知道我在搞点云,于是给我搞了一本《Real-Time Rendering 4th Edition\text{Real-Time Rendering\ 4th\ Edition}》的电子版,这本书在网上很难找到电子版,都是影印的,所以说是很珍贵了。虽然是全英的,但是我一定不会让这本书闲置的……我一贯比较反对啃大部头的书,认为那些大部头的经典书籍是可以当字典一样使用的,需要什么查什么,但是我小学时真的有抄过字典,所以并不是不能接受的。这本书,我打算在我浏览完 PyhonPyhon 的五章系统编程(PYTHON SHELLPYTHON\ SHELL 脚本)后,结合中文版以及网友对其相关总结进行泛读,精读是不可能的,读完孩子都有了,泛读完了以后,再针对性的查看自己所需要的,依然是当做字典一样,只不过是先泛读一遍这本字典。

倦鸟
2018.10.20 17:14

阅读更多

扫码向博主提问

f_zyj

弱校 ACM 竞赛拓荒者,从零到区域赛银
  • 擅长领域:
  • ACM
  • 挑战程序设计
  • C/C++
去开通我的Chat快问
换一批

没有更多推荐了,返回首页