课程研究报告
课程名称: 计算机图形学
报告类型: 程序设计报告
设计题目: 室外场景
所在院系: 计算机科学与技术学院
所在学科: 软件工程
学生类别: 2019 级
指导教师: _ 许营坤__
学生姓名: 张坤/唐良平/曾林超/赵盈
学 生 学 号 : 201906061726 / 201906061914/
201906061923/ 201906061431
选课时间: 2021 年秋季学期
评阅成绩:
程序设计报告
2
浙江工业大学
一、 课程设计分工情况
张坤:天空,马路贴图,汽车动画,直升机模型,课设报告撰写
唐良平:别墅模型,汽车模型和背包模型的构建
曾林超:草地和四个房子及其贴图
赵盈:猫模型,PPT 制作
二、 程序运行的软硬件环境
软件环境
OpenGL(全写 Open Graphics Library)是指定义了一个跨编程语言、跨平台
的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一
个功能强大,调用方便的底层图形库。OpenGL 是行业领域中最为广泛接纳的
2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应
用程序。OpenGL 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。
在包含 CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实
等行业领域中,OpenGL 帮助程序员实现在 PC、工作站、超级计算机等硬件设
备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。本文使用
GLUT 来调用 OpenGL 各种封装的方法和函数。
GLFW 是一个专门针对 OpenGL 的 C 语言库,它提供了一些渲染物体所需
的最低限度的接口。它允许用户创建 OpenGL 上下文,定义窗口参数以及处理用
户输入。
因为 OpenGL 只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡
实现的。由于 OpenGL 驱动版本众多,它大多数函数的位置都无法在编译时确定
下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时
获取函数地址并将其保存在一个函数指针中供以后使用.
GLAD 是一个开源的库,它能解决我们上面提到的那个繁琐的问题。GLAD
的配置与大多数的开源库有些许的不同,GLAD 使用了一个在线服务。在这里我
们能够告诉 GLAD 需要定义的 OpenGL 版本,并且根据这个版本加载所有相关
的 OpenGL 函数
一个非常流行的模型导入库是 Assimp,它是 Open Asset Import Library(开放
的资产导入库)的缩写。Assimp 能够导入很多种不同的模型文件格式(并也能
够导出部分的格式),它会将所有的模型数据加载至 Assimp 的通用数据结构中。
当 Assimp 加载完模型之后,我们就能够从 Assimp 的数据结构中提取我们所需
的所有数据了。由于 Assimp 的数据结构保持不变,不论导入的是什么种类的文
件格式,它都能够将我们从这些不同的文件格式中抽象出来,用同一种方式访问
我们需要的数据。
环境配置及过程
首先打开 visio Studio
点击如下图所示的管理 NuGet 程序包
程序设计报告
3
安装 nupengl
安装完毕后,会在项目文件夹下生成一个 packages 文件夹
打开文件夹路径 packages\nupengl.core.0.1.0.1\build\native 如下
这里有 include 文件夹和 lib 文件夹,在 include 文件夹下放置.h 头文件和.c 文
件,在 lib 文件夹下放置.lib 文件
程序设计报告
4
GLFW
GLFW 可以从它官方网站的下载页上获取。GLFW 已经有针对 Visual
Studio 2013/2015 的预编译的二进制版本和相应的头文件,但是为了完整性我们
将从编译源代码开始。所以我们需要下载源代码包。
下载源码包之后,将其解压并打开。我们只需要里面的这些内容:
� 编译生成的库
� include 文件夹
从源代码编译库可以保证生成的库是兼容你的操作系统和 CPU 的,而预编译的
二进制文件可能会出现兼容问题(甚至有时候没提供支持你系统的文件)。提供
源代码所产生的一个问题在于不是每个人都用相同的 IDE 开发程序,因而提供
的工程/解决方案文件可能和一些人的 IDE 不兼容。所以人们只能从.c/.cpp
和.h/.hpp 文件来自己建立工程/解决方案,这是一项枯燥的工作。但因此也诞生
了一个叫做 CMake 的工具。
CMake
CMake 是一个工程文件生成工具。用户可以使用预定义好的 CMake 脚本,
根据自己的选择(像是 Visual Studio, Code::Blocks, Eclipse)生成不同 IDE 的工
程文件。这允许我们从 GLFW 源码里创建一个 Visual Studio 2015 工程文件,之
后进行编译。首先,我们需要从这里下载安装 CMake。我选择的是 Win32 安装
程序。
当 CMake 安装成功后,你可以选择从命令行或者 GUI 启动 CMake,由于
我不想让事情变得太过复杂,我们选择用 GUI。CMake 需要一个源代码目录和
一个存放编译结果的目标文件目录。源代码目录我们选择 GLFW 的源代码的根
目录,然后我们新建一个 build 文件夹,选中作为目标目录。
程序设计报告
5
在设置完源代码目录和目标目录之后,点击 Configure(设置)按钮,让 CMake
读取设置和源代码。我们接下来需要选择工程的生成器,由于我们使用的是
Visual Studio 2015,我们选择 Visual Studio 14 选项(因为 Visual Studio 2015 的
内部版本号是 14)。CMake 会显示可选的编译选项用来配置最终生成的库。这
里我们使用默认设置,并再次点击 Configure(设置)按钮保存设置。保存之后,
点击 Generate(生成)按钮,生成的工程文件会在你的 build 文件夹中。
编译
在 build 文件夹里可以找到 GLFW.sln 文件,用 Visual Studio 2015 打开。因为
CMake 已经配置好了项目,所以我们直接点击 Build Solution(生成解决方案)按
钮,然后编译的库 glfw3.lib(注意我们用的是第 3 版)就会出现在 src/Debug
文件夹内。
库生成完毕之后,我们需要让 IDE 知道库和头文件的位置。有三种方法:
1. 找到 IDE 或者编译器的/lib 和/include 文件夹,添加 GLFW 的 include 文
件夹里的文件到 IDE 的/include 文件夹里去。用类似的方法,将
glfw3.lib 添加到/lib 文件夹里去。虽然这样能工作,但这不是推荐的方
式,因为这样会让你很难去管理库和 include 文件,而且重新安装 IDE
或编译器可能会导致这些文件丢失。
2. 推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件,并
且在你的 IDE 或编译器中指定这些文件夹。我个人会使用一个单独的文
件夹,里面包含 Libs 和 Include 文件夹,在这里存放 OpenGL 工程用到
的所有第三方库和头文件。这样我的所有第三方库都在同一个位置(并
且可以共享至多台电脑)。然而这要求你每次新建一个工程时都需要告诉
IDE/编译器在哪能找到这些目录。
3. 将上面这些 Libs 和 Include 资源放到前文提到的
packages\nupengl.core.0.1.0.1\build\native 如下