我的github
1 总览
到目前为止,我们已经学习了如何使用矩阵变换来排列二维或三维空间中的对象。所以现在是时候通过实现一些简单的变换矩阵来获得一些实际经验了。在接下来的三次作业中,我们将要求你去模拟一个基于CPU的光栅化渲染器的简化版本。
本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形 (在代码框架中,我们已经提供了 draw_triangle 函数,所以你只需要去构建变换矩阵即可)。简而言之, 我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。
以下是你需要在 main.cpp 中修改的函数:
(1)get_model_matrix(float rotation_angle): 逐个元素地构建模型变换矩阵并返回该矩阵。在此函数中,你只需要实现三维中绕z轴旋转的变换矩阵, 而不用处理平移与缩放。
(2)get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回该矩阵。
(3)[Optional] main(): 自行补充你所需的其他操作。
当你在上述函数中正确地构建了模型与投影矩阵,光栅化器会创建一个窗口 显示出线框三角形。由于光栅化器是逐帧渲染与绘制的,所以你可以使用 A 和 D 键去将该三角形绕 z 轴旋转 (此处有一项提高作业,将三角形绕任意过原点的 轴旋转)。当你按下 Esc 键时,窗口会关闭且程序终止。
另外,你也可以从命令行中运行该程序。你可以使用以下命令来运行和传递 旋转角给程序,在这样的运行方式下,是不会生成任何的窗口,输出的结果图像 会被存储在给定的文件中 (若未指定文件名,则默认存储在 output.png 中)。图 像的存储位置在可执行文件旁,所以如果你的可执行文件是在 build 文件夹中, 那么图像也会在该文件夹内。
命令行的使用命令如下:
(1)./Rasterizer //循 环 运 行 程 序, 创 建 一 个 窗 口 显 示, 且 你 可 以
                            //使 用A键 和D键 旋 转 三 角 形。
(2)./Rasterizer −r 20 //运 行 程 序 并 将 三 角 形 旋 转20度,然 后 将
                                      //结 果 存 在output.png中
(3)./Rasterizer −r 20 image.png //运 行 程 序 并 将 三 角 形 旋 转20度,
                                                        //然 后 将 结 果 存 在image.png中。

 

 

posted on 2022-12-28 14:16  XiaoNiuFeiTian  阅读(43)  评论(0编辑  收藏  举报