我的github
posts - 3243,  comments - 42,  views - 158万
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   XiaoNiuFeiTian  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-12-28 SOE开发之IMapServerSourceDescription
2021-12-28 SOE之JSONObject
2020-12-28 GIS算法-最短路径-连通性-网络分析-路径规划
2020-12-28 Arcgis直连SQLServer数据库,通过REST修改数据ArcMap中更新数据库数据不更新,数据不统一
2020-12-28 None和NULL
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示