有关我零基础入门Opengl并想开发七巧板小程序交作业这档子事
背景故事
- c++课程老师给布置作业,“小作业”,使用c++开发七巧板小游戏,要求图形颜色不同,能拖动,放大缩小旋转,进行拼图。
- 一看题目,我直接把有手就行打在了屏幕上,然后叫嚣我必能做完,事实上后台逻辑也确实不难,但是假期过后我没写完,交了半成品代码坐在教室瑟瑟发抖,究其原因,我发现我不会图形库开发。临时上手了Opengl被锤了一顿。
为什么用Opengl
- 在同学们都根据老师推荐使用了ege的时候,我一个人倔的不听学长劝阻去入手了Opengl,事实证明,确实费劲,入手都费劲,更不用说往后学。我只学到了“LearnOpengl”的第三节课,你好三角形。
- 究其原因,还是感觉ege对我来说,除了交作业没有任何作用,不如借此机会逼练自己,入手Opengl,让技术栈更圆满一些(虽然之前学的东西也都没有很圆满的水准)。
结果如何
- 如最开始所说,我只交了半成品上去,老师对班里表现并不满意,又给了一周时间让我们完成交回去。这我能忍他?开搓开搓。
- 好的,现在搓完了,虽然效果很一般,但起码要求全都实现了。也算是入手了Opengl(没入门,没入门,大佬们别锤)。
- 最后开始页面截图如下(我甚至连个菜单目录都懒得做,直接上鼠标和键盘操作的东西)
- 码量的话大概也就是个小一千吧,没仔细数。(源码是屎山,就先不放了,丢人)
大概思路
- 走个设计思路,懒得画图,就直接口述了:
- 一个test.cpp脚本作为程序入口。
- 一个DrawingBoard.h+DrawingBoard.cpp作为画板类。统御管理画在其上面的图形对象。包括点击事件背后的图形绑定操作,放大缩小旋转移动的响应,每一帧更新绘制图像等都在这个类里做了管理,由于项目很小,只需要一个画板,为了写起来方便,我给画板写成了单例。
- 一个Graph.h+Graph.cpp脚本作为图形基类支持参数定义图形对象。其中什么都定义了,真的是定义了一大堆,属性大致有边长,顶点vector,旋转,颜色,shader相关对象内容,VAO,VBO等内容。然后方法的话,各种getset就不说了。要设计一手怎么给每个对象有自己独立的shader对象来用,还要有渲染自己的方法,之后画板直接调用每个对象的方法方便渲染。总之屎山,想到啥写啥,乱的很菜得很。有些有必要提一嘴的技术内容我会在之后专门出的技术博客里提一嘴。
- 正方形,三角形,平行四边形类,继承自上面的Graph类,分别实现自己的点对象初始化方法,点坐标更新方法,顶点VBO更新方法等。
- Point.h+Point.cpp作为顶点类而存在,没什么内容,就是诸如点坐标,getset之类(这个类存在的意义就在于我上一个版本是直接在命令行用字符暴力画的图,还被老师教训了一顿),新版本后删掉了原来大把的方法,确实用不到了,opengl帮我做了。