背景
今年读研,不巧被调剂到了虚拟现实实验室。绝大部分是与计算机图形学相关的东西,然而本科并没有学过,于是导师布置了一个作业。
“小程啊,这几个月呢,你先不要浪费,试着用OpenGL模拟一个学校,哦不,学校呢可能太大了,那你就先模拟你们住的寝室,了解一下三维编程是怎么做的怎么实现的。”
于是在忙活完了与此毫不相关的毕业设计后,就着手准备画个寝室出来,买了《计算机图形学(第四版)》后,翻了几章发现里面的讲的东西太过基础、过时,最新的VAO, VBO 等等概念都没有讲。于是在网上搜了好多教程,其中learnOpenGL的教程做的非常棒,借用了很多现成的库,可以很快的画出东西,加快了学习开发效率(网址:https://learnopengl-cn.github.io/)
教程翻得差不多后,可以开始着手画寝室了。由于画的是静态的画面,因此用到的知识点不多:
- 摄像机的实现
- 绘制长方体
- 加载纹理
搜了好久之后(网上绘制三维场景的例子真是太少了=。=。。),
绘制三维场景的方案有两种:
- 利用基本的图元,构建相应的模型,然后贴上相应的纹理。
- 利用现成的建模软件(如3ds等)先建好模型,如床,桌子等,然后载入到OpenGL的程序中
无论从显示效果、还是显示效率来看,第二种的方案要远优于第一种方案,然而毕竟程序员的生涯才刚刚开始,本科阶段欠的代码量是注定要还的。于是采用了第一种方案中最简单的方案,拿不同大小的长方体完成了整个寝室的绘制。
实现效果
结尾
最后在deadline前写成了这幅样子,不过有人说,deadline并不是要求你做的有多完美,它只是给你一个把写的这么烂的东西交上去的勇气。这句话我是很赞同的。接下来的计划就可以静下心来回头看《计算机图形学》这本书了,基础还是很重要的。
具体的代码实现放到了github上(落了四年的水平写的真是太烂了,不过知耻而后勇嘛~求板儿砖)
https://github.com/likewind1993/DormitoryWithOpenGL