Assignment 1
Assignment 1
教授: 闫令琪
计算机图形学与混合现实研讨会
注意:
• 任何更新或更正都将发布在论坛上,因此请偶尔检查一下。
• 论坛链接:http://games-cn.org/forums/forum/graphics-intro/。
• 你必须独立完成自己的作业。
• 你可以在论坛上发布帖子求助,但是发布问题之前,请仔细阅读本文档。
• 在截止时间之前将你的作业提交到 SmartChair 上。
1
1 总览
到目前为止,我们已经学习了如何使用矩阵变换来排列二维或三维空间中的
对象。所以现在是时候通过实现一些简单的变换矩阵来获得一些实际经验了。在
化版本。
本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个
点 v0 (2.0, 0.0, −2.0), v1 (0.0, 2.0, −2.0), v2 (−2.0, 0.0, −2.0), 你需要将这三个点的坐
标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形 (在代码框架中,我们已
我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供
的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。
如果你对上述概念有任何不清楚或疑问,请复习课堂笔记或询问助教。
已经填写好的函数,并保证提交的代码是已经完成且能运行的):
阵并返回该矩阵。在此函数中,你只需要实现三维中绕 z 轴旋转的变换矩阵,
而不用处理平移与缩放。
该矩阵。
2
当你在上述函数中正确地构建了模型与投影矩阵,光栅化器会创建一个窗口
显示出线框三角形。由于光栅化器是逐帧渲染与绘制的,所以你可以使用 A 和
另外,你也可以从命令行中运行该程序。你可以使用以下命令来运行和传递
旋转角给程序,在这样的运行方式下,是不会生成任何的窗口,输出的结果图像
那么图像也会在该文件夹内。
命令行的使用命令如下:
1 ./Rasterizer // 循 环 运 行 程 序 , 创 建 一 个 窗 口 显 示 , 且 你 可 以
2 // 使 用 A 键 和 D 键 旋 转 三 角 形 。
3
4 ./Rasterizer −r 20 // 运 行 程 序 并 将 三 角 形 旋 转20度 , 然 后 将
5 // 结 果 存 在output.png 中
6
7 ./Rasterizer −r 20 image.png // 运 行 程 序 并 将 三 角 形 旋 转 20 度 ,
8 // 然 后 将 结 果 存 在image.png 中 。
2 代码框架
在本次作业中,因为你并不需要去使用三角形类,所以你需要理解与修改的
界面与绘制。
光栅化器类在该程序系统中起着重要的作用,其成员变量与函数如下。
成员变量:
3
• Matrix4f model, view, projection: 三个变换矩阵。
颜色数据。
成员函数:
递给光栅化器。
阵。
定矩阵 p,并传递给光栅化器
为 (r, g, b) 的颜色,并写入相应的帧缓冲区位置。
在 main.cpp 中,我们模拟了图形管线。我们首先定义了光栅化器类的实例,然
后设置了其必要的变量。然后我们得到一个带有三个顶点的硬编码三角形 (请不
要修改它)。在主函数上,我们定义了三个分别计算模型、视图和投影矩阵的函数,
每一个函数都会返回相应的矩阵。接着,这三个函数的返回值会被 set_model(),
屏幕上显示出变换的结果。
在用模型、视图、投影矩阵对给定几何体进行变换后,我们得到三个顶点的
4
在 [-1,1] 之间的 x, y, z 坐标构成。我们下一步需要做的就是视口变换,将坐标映
成,所以不需要担心。但是,你需要去理解这步操作是如何运作的,这一点十分
重要。
3 编译
确保这两个库的配置正确。
置”
,在弹出的窗口中选择“系统—处理器”
,然后就可以设置虚拟机的核心数了。
具体操作可见下图:
5
4 评分与提交
评分:
每次作业的评分,分为基础与提高两部分,即在作业批改时会给大家反馈两
个成绩。由于作业不是强制要求必须提交,所以在完成全部作业后,我们会统计
所有的基础分数。若基础分数及格则视为通过课程,反之视为不通过。
• [5 分] 正确构建模型矩阵。
• [5 分] 正确构建透视投影矩阵。
• [10 分] 你的代码可以在现有框架下正确运行,并能看到变换后的三角形。
• [10 分] 当按 A 键与 D 键时,三角形能正确旋转。或者正确使用命令行得
到旋转结果图像。
过原点的轴的旋转变换矩阵。
提交:
当你完成作业后,请清理你的项目,记得在你的文件夹中包含 CMakeLists.txt
是否完成提高题。最后,将上述内容打包,并用“姓名_Homework1.zip”的命名
平台链接:http://smartchair.org/GAMES2020Course-YLQ