任务一:创建交互式三维场景
前言
完整工程文件
具体运行环境配置看这个栏目的第一篇文章
专选课计算机图形学的第一次作业,老师是第一次给本科生上课,用的作业是香港中文大学的计算机图形学的作业内容(老师就是这个学校毕业)。第一次接触OpenGL,一开始也没学什么高级的技术,所以就简单画了一些图形的组合,只学了一周不到,写这篇文章主要为了记录和分享所学内容(毕竟也花费了很多时间的专选),代码格式也比较混乱,很多重复的部分,比如定义顶点的信息等等,凑合看看吧。
下面是作业文档的要求
介绍
第一个编程任务将向您介绍OpenGL图形编程接口和可编程管道。在这个编程任务中,您需要创建一个具有用户交互的3D场景(参见图1中的好例子)。本作业旨在将您对计算机图形概念的理解应用于实践,熟悉OpenGL编程库,并向您介绍可编程管道。
您的目标是设计具有用户交互的3D场景。具体来说,在场景中,必须有2D对象(例如平面)、3D对象(例如立方体)和/或线(点)(示例见图2),并且您应该能够对其应用包括平移、旋转和缩放在内的变换。用户应该能够使用键盘(和/或鼠标)平移、旋转和缩放对象。对象颜色、窗口大小、窗口标题和场景布局都取决于您。要使场景更逼真,应使用透视投影而不是正交投影。需要使用索引绘制对象。您 的3D场景不受演示图片和程序的限制。
实施详细信息
我们提供了两个着色器程序(即VertexShaderCode.glsl和FragmentShaderCode.glsl)和一个模板主程序 (即main.cpp)。它们包括GLFW接口工具包中用于事件处理函数的必要函数。使用此模板作为实施的基础。你必须设计你的函数来处理键盘事件,你还应该提交一个readme.txt文件来解释你在程序中设计的键盘(和/或鼠标)事件。否则,将扣除相关项目的分数。所有程序都应符合合理的编程标准:标题注释、在线注释、良好的模块化、清晰的打印输出和效率。
基本要求:
-
OpenGL代码应该使用OpenGL 3.0+的可编程管道,而不是固定管道。
-
至少绘制一个二维对象和两个三维对象。
-
确保至少绘制了一个带有索引的对象。
-
创建至少三种键盘和/或鼠标事件,如旋转、平移和缩放。
-
使用给定的透视投影(45.0 degree, any aspect, 0.1, 20.0)绘制场景。
-
启用深度测试以实现遮挡。
其他自我设计要求:
可以自由添加对象、移动对象、组织对象,以及任何使场景有趣的内容
分级方案
您的作业将根据以下评分方案进行评分:
实现效果
鼠标 “移动”:转动整个布局视角
鼠标 “滑轮”:上滑放大视角,下滑缩小视角
Key “Esc”: exit
Key “W”: 视角前移
Key “A”: 视角左移
Key “S”: 视角后移
Key “D”: 视角右移
Key “UP”: 人物上移
Key “DOWN”: 人物下移
Key “LEFT”: 人物左移
Key “RIGHT”: 人物右移
Key “SPACE”: 人物跳跃
Key “ENTER”: 人物身体换色
Key “Q”: 透视投影参数宽高比增大
Key “E”: 透视投影参数宽高比减小
说明:左下角和右上角有两个传送门,人物走到对应位置可以传到相应传送门。
人物只能在棋盘内活动,超过布局大小时会移动到对面的位置
最后再说一下因为是第一次做,所以很多地方有重复的部分(比如很多个for循环),