IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Games101 作业1 -> 正文阅读

[C++知识库]Games101 作业1

???????课程链接

???????学霸笔记

???????绕 Z 轴旋转很简单,如果希望旋转方向相反,将 alpha 换为 -alpha 即可
在这里插入图片描述

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 angle = rotation_angle * M_PI / 180.0;

    model << cos(angle), sin(angle), 0, 0, 

        -sin(angle), cos(angle), 0, 0, 

        0, 0, 1, 0, 

        0, 0, 0, 1;



    return model;

}

???????透视投影求解为 M p e r s p = M o r t h o ? M p e r s p ? > o r t h o M_{persp}=M_{ortho}*M_{persp->ortho} Mpersp?=Mortho??Mpersp?>ortho?

???????其中 M o r t h o M_{ortho} Mortho? 为:
在这里插入图片描述

???????我们忽略掉第二个矩阵(平移操作),同时摄像机上方为 Y 轴正方向(如果与你显示的不一致,就将 Y 轴翻转即可)

???????其中 M p e r s p ? > o r t h o M_{persp->ortho} Mpersp?>ortho? 为:
在这里插入图片描述
???????现在来看函数结构:

Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar)

???????其中 eye_fov 是视广角的对角,aspect_ratio 是纵横比,根据视广角和纵横比,可以计算水平和垂直方向的视广角,计算思路

???????而 zNear 和 zFar 分别对应 n 和 f。根据视广角,n 和 f 也就可以计算出 l,r 和 b,t。

Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio,

                                      float zNear, float zFar)

{

    // Students will implement this function



    Eigen::Matrix4f projection = Eigen::Matrix4f::Identity();



    // TODO: Implement this function

    // Create the projection matrix for the given parameters.

    // Then return it.

    Eigen::Matrix4f persp_ortho = Eigen::Matrix4f::Identity();

    Eigen::Matrix4f ortho = Eigen::Matrix4f::Identity();

    float n = zNear, f = zFar;

    persp_ortho << n, 0, 0, 0,

                    0, n, 0, 0,

                    0, 0, n + f, -n * f,

                    0, 0, 1, 0;

    float tb = tan(eye_fov * M_PI / 2.0 / 180.0) * cos(atan(aspect_ratio)) * fabs(zNear) * 2;

    float rl = tb / aspect_ratio;

    float nf = zNear - zFar;

    ortho << 2.0 / rl, 0, 0, 0,

            0, -2.0 / tb, 0, 0, 

            0, 0, 2.0 / nf, 0,

            0, 0, 0, 1;

    projection = ortho * persp_ortho;

    return projection;

}

???????根据题目描述,是一个 v 0 ( 2.0 , 0.0 , ? 2.0 ) , v 1 ( 0.0 , 2.0 , ? 2.0 ) , v 2 ( ? 2.0 , 0.0 , ? 2.0 ) v_{0}(2.0,0.0,-2.0), v_{1}(0.0,2.0,-2.0), v_{2}(-2.0,0.0,-2.0) v0?(2.0,0.0,?2.0),v1?(0.0,2.0,?2.0),v2?(?2.0,0.0,?2.0) 的三角形。同时,设置 A 操作逆时针旋转,D 操作顺时针旋转。
在这里插入图片描述

???????最后,话说 C++ 有无角度转弧度制的函数?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 01:23:14  更:2021-08-17 01:23:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 4:25:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码