当前位置: 首页 > news >正文

Games101 作业1 旋转与投影

作业简述

作业要求得到一个三角形不同角度的图像。
作业给出了代码框架,框架包含一个画三形的函数和一个简单的光栅器。
我们仅需要实现主函数的部分代码(关于旋转和透视投影这一部分)。

特别说明

在实现作业时发现框架并没有给出cmath库,但仍能使用三角函数,于是给出了下述的实验代码:

//  #include "Triangle.hpp"
// #include "rasterizer.hpp"
#include <eigen3/Eigen/Eigen>
#include <iostream>
// #include <opencv2/opencv.hpp>int main(){std::cout << sin(30.0) << std::endl;return 0;
}

通过实验得出,注释掉#include <eigen3/Eigen/Eigen>后无法用三角函数,因此确定eigen3中有实现三角函数的函数。

作业代码

Eigen::Matrix4f get_model_matrix(float rotation_angle)
{Eigen::Matrix4f model = Eigen::Matrix4f::Identity();// TODO: Implement this function// Create the model matrix for rotating the triangle around the Z axis.// Then return it.float ang_rat = rotation_angle / 180.0 * MY_PI;Eigen::Matrix4f rotating_of_Z;rotating_of_Z << cos(ang_rat), -sin(ang_rat), 0.0f, 0.0f,sin(ang_rat), cos(ang_rat) , 0.0f, 0.0f,0.0f        , 0.0f         , 0.0f, 0.0f,0.0f        , 0.0f         , 0.0f, 1.0f;model = model * rotating_of_Z;return model;
}Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio,float zNear, float zFar)
{// Students will implement this functionEigen::Matrix4f projection = Eigen::Matrix4f::Identity();// TODO: Implement this function// Create the projection matrix for the given parameters.// Then return it.// projection MatrixEigen::Matrix4f projection_Matrix;projection_Matrix <<    zNear       , 0.0f          , 0.0f            , 0.0f            ,0.0f        , zNear         , 0.0f            , 0.0f            ,0.0f        , 0.0f          , zNear + zFar    , -zNear * zFar ,0.0f        , 0.0f          , 1.0f            , 0.0f            ;float l, r, t, b, n, f;float ang_rat_fov = eye_fov / 180.0f * MY_PI;t = zNear * tan(ang_rat_fov / 2.0f);b = -t;r = t * aspect_ratio;l = -r;n = zNear;f = zFar;// Orthographic MatrixEigen::Matrix4f Ort_tra_mat;Ort_tra_mat <<  1.0f        , 0.0f          , 0.0f          , -1.0f * (r + l) / 2.0f    ,0.0f        , 1.0f          , 0.0f          , -1.0f * (t + b) / 2.0f  ,0.0f        , 0.0f          , 1.0f          , -1.0f * (n + f) / 2.0f  ,0.0f        , 0.0f          , 0.0f          , 1.0f                    ;Eigen::Matrix4f Ort_rat_mat;Ort_rat_mat <<  2.0f / (r - l), 0.0f            , 0.0f            , 0.0f                  ,0.0f          , 2.0f / (t - b)  , 0.0f            , 0.0f                  ,0.0f          , 0.0f            , 2.0f / (n - f)  , 0.0f                    ,0.0f          , 0.0f            , 0.0f            , 1.0f                    ;projection = Ort_rat_mat * Ort_tra_mat * projection_Matrix * projection;return projection;
}

有几个需要注意的点

  • 代码框架中π\piπ已给出
  • 在透视投影中给出的参数解释如下
    在这里插入图片描述
  • 在我的代码中,正交投影的平移和放缩是分开求的
  • 整数后加f的语法会报错
http://www.dtcms.com/a/348061.html

相关文章:

  • 量子链(Qtum)分布式治理协议
  • Qt+windows+QtInstallerFramework打包可执行文件教程-美观且简单
  • Django的Serializers与 fastapi 的Pydantic
  • Excel 转化成JSON
  • Java:LinkedList的使用
  • Django的Settings 配置文件详解
  • 【ArcGIS Pro 全攻略】GIS 数据格式终极指南:从原理到实战,再也不纠结选哪种格式!
  • React useState 全面深入解析
  • Linux 824 shell:expect
  • 基于5G NR NTN与DVB-S2X/RCS2的机载卫星通信终端性能分析
  • 低功耗模式DMA数据搬运问题解析
  • 在测试接入抖音小游戏订阅消息推送时遇到的问题
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十八)
  • K8s部署MySQL8.0数据库
  • Transformer实战(13)——从零开始训练GPT-2语言模型
  • 【go语言】字符串函数
  • imx6ull-驱动开发篇39——Linux INPUT 子系统实验
  • 05-ArkUI界面开发
  • Solidity学习笔记
  • ZKmall模块商城的推荐数据体系:从多维度采集到高效存储的实践
  • 用 Bright Data MCP Server 构建实时数据驱动的 AI 情报系统:从市场调研到技术追踪的自动化实战
  • 青少年软件编程(python五级)等级考试试卷-客观题(2024年6月)
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据的维护
  • Adobe CS6所有系列绿色免安装版,Photoshop 6 Adobe Illustrator CS6 等绿色版
  • Spring创建的方式
  • 使用 Frida 运行时检测 Android 应用的真实权限状态 (App Ops)
  • 第4章栈和队列:顺序队——基本结构
  • Java 基础学习总结(211)—— Apache Commons ValidationUtils:让参数校验从 “体力活“ 变 “优雅事“
  • Vue状态管理工具pinia的使用以及Vue组件通讯
  • 一个byte表示多个bool属性的功能