TA百人计划学习笔记 1.2.3.1 P矩阵补充

这篇具有很好参考价值的文章主要介绍了TA百人计划学习笔记 1.2.3.1 P矩阵补充。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 源视频 图形学投影矩阵推导_哔哩哔哩_bilibili
    • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

    • 正交投影
      • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

        TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

    • 透视投影
      • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

        TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

        TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

        TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

  • 博客 https://www.cnblogs.com/bluebean/p/5276111.htm (步骤很清楚)
    • 视锥体
      • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

      • 如图,近截面与远截面之间构成的这个四棱台就是视锥体,而透视投影矩阵的任务就是把位于视锥体内的物体的顶点X,Y,Z坐标映射到[-1,1]范围。这就相当于把这个四棱台扭曲变形成一个立方体。这个立方体叫做规则观察体 (Canonical View Volume, CVV)。如下图:
        • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

    • 变换方法或规则:
      • 如下图,有一点P,位于视锥体内,设坐标为(x,y,z).分别对x,y坐标和z坐标的变换到[-1,1]的方式进行讨论:
        • 1.x,y坐标的变换方式:
          • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

             
            • (1)连接视点eye与P点与近裁剪面交于P’点
            • (2)设近裁剪面的宽度为W,高度为H,P’点的x坐标范围是[-W/2,W/2],y坐标范围是[-H/2,H/2],然后分别线性映射至[-1,1]内即可。
        • 2.z坐标的变换方式
          • z坐标的范围是N至F,需要映射到[-1,1],映射方法暂时按下,不做想法。
    • 透视投影函数形式
      • void Matrix4X4::initPersProjMatrix(float FOV, const float aspect, float zNear, float zFar)
      • 透视投影矩阵构建函数的参数:
        • Fov:纵向的视角大小
          • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

             
            • aspect:裁剪面的宽高比
            • zNear:近裁剪面离摄像机的距离,图中的n
            • zFar:远裁剪面离摄像机的距离,图中的f
      • 通过这几个参数和三角函数的数学知识可以求得近裁剪面的高度,参考上图:
        • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

        • 求得点P在近裁剪面的投影点P’的坐标
          • 1.根据相似三角形对应边长度的比率相同,由图可得
            • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

            • 其中
              • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

          • 2.x’,y’的范围沿原点对称,只要将他们分别除以W/2,H/2,即可以使范围位于[-1,1]内。前面已求得W,H,因此:
            • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

          • 3.假设
            • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

          • 4.我们最后需要的坐标点P’’即是
            • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

    • 推导矩阵
      • 然后为了自动化的得到这个结果,我们使用矩阵这种数学工具,将一个矩阵乘以一个向量,得到一个新的向量,使得我们所有的运算步骤和运算数据蕴藏在矩阵和乘法中。下面的工作就是寻找到一个矩阵使得:
        • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

      • 我们发现求解
        • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

      • 很难找出合适的m00、m02,因为左边x和z是以加法的形式相邻,右边z确成为了x的分母。
        • 解决方法:将右边的以四维列向量表示的坐标每一项乘以z,所以有:
          • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

          • 所以可以求得矩阵为

            TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

      • 最后求得投影矩阵为

        TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

      • 将这样的矩阵乘以视锥体内的一个顶点坐标,得到一个新的向量,再将这个向量的每个分量除以第四个分量(w)(这一步叫做透视除法,在gpu渲染管线中位于顶点着色器处理之后,由硬件自动完成, 之后就得到了规则立方观察体中的新的坐标。
      • 注意:z坐标的映射方式的获得,最后我们是为了方便矩阵乘法的操作反向求得了z坐标与cvv中的z坐标的映射方式:
        • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

           
          • 可见两者的映射并不是线性的, 如下图所示;
            • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵

            • 上图为 深度缓存中的深度值DepthValue和物体距离摄像机深度ZValue的关系图;DepthValue=(z''+1)/2,将深度值从范围(-1,1)转换到(0,1)。
    • 代码示例:
      • TA百人计划学习笔记 1.2.3.1 P矩阵补充,学习,笔记,矩阵文章来源地址https://www.toymoban.com/news/detail-800092.html

      • 代码
        • void Matrix4X4::initPersProjMatrix(float FOV, const float aspect, float zNear, float zFar)
        • {
        • const float zRange = zNear - zFar;
        • const float tanHalfFOV = tanf(ToRadian(FOV / 2.0f));
        • elements[0][0] = 1.0f / (tanHalfFOV * aspect);
        • elements[0][1] = 0.0f;
        • elements[0][2] = 0.0f;
        • elements[0][3] = 0.0;6
        • elements[1][0] = 0.0f;
        • elements[1][1] = 1.0f / tanHalfFOV;
        • elements[1][2] = 0.0f;
        • elements[1][3] = 0.0;7
        • elements[2][0] = 0.0f;
        • elements[2][1] = 0.0f;
        • elements[2][2] = (-zNear - zFar) / zRange;
        • elements[2][3] = 2.0f * zFar*zNear / zRange;8
        • elements[3][0] = 0.0f;
        • elements[3][1] = 0.0f;
        • elements[3][2] = 1.0f;
        • elements[3][3] = 0.0;9
        • }

到了这里,关于TA百人计划学习笔记 1.2.3.1 P矩阵补充的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 个人git笔记,持续学习并补充填写

    该文章仅仅是为了方便个人日常观看,有些地方没有做详细介绍 git init 创建本地仓库(最好先创建一个目录,在该目录下输入指令创建git仓库),创建完成后该目录下会存在一个.git文件 仓库配置 配置时可以加上--global选项,加上后设置的具有全局属性,该机器下的所有仓库

    2024年02月11日
    浏览(32)
  • FreeRTOS 学习相关笔记 附C语言内容补充

    学习视频为【正点原子】手把手教你学FreeRTOS实时系统 裸机 裸机:前后台系统,前台系统指中断服务函数,后台系统指大循环。 裸机中断:是一瞬间的事情,不能处理太多问题。可以用来设置标志位,把执行函数放在主函数里面。 RTOS 1、高优先任务只有处于阻塞状态,才会

    2024年01月21日
    浏览(53)
  • 软考A计划-系统架构师-学习笔记-第三弹

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、

    2024年02月08日
    浏览(38)
  • 软考A计划-系统架构师-学习笔记-第一弹

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、

    2024年02月08日
    浏览(31)
  • 算法学习——LeetCode力扣补充篇11(64. 最小路径和、48. 旋转图像 、169. 多数元素、394. 字符串解码、240. 搜索二维矩阵 II )

    64. 最小路径和 - 力扣(LeetCode) 描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 示例 1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→

    2024年04月23日
    浏览(32)
  • 软考A计划-网络规划设计师-学习笔记-上

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等) 有什么需要

    2024年02月07日
    浏览(46)
  • 软考A计划-系统集成项目管理工程师-一般补充知识-中

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、

    2024年02月10日
    浏览(39)
  • 【Unity学习笔记】New Input System 部分源码和测试用例补充

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/135630016 作者:CSDN@|Ringleader| 主要参考: Unity官方Input System手册与API 【Unity学习笔记】Unity TestRunner使用 NewIputSystem主体内容请参见:【Unity学习笔记】第十二 · New Input System 及其系统结构 和 源码浅析 注:本文使用的

    2024年01月22日
    浏览(30)
  • 庄懂的TA笔记(十七)<特效:屏幕UV + 屏幕扰动>

    目录 庄懂的TA笔记(十七)<特效:屏幕UV + 屏幕扰动> 大纲: 正文: 一、屏幕UV: 二、屏幕扰动: 三、任务委托: 效果展示: 一、屏幕UV: 1、案例展示: 屏幕UV在过往案例使用中,出现了 镜头畸变,纹理大小不能锁定等问题,这节内容就把 屏幕UV 的 使用全部讲完 。

    2024年02月06日
    浏览(21)
  • SAP MM学习笔记39 - MRP(资材所要量计划)

    这一章开始,离开请求书,学点儿新知识啦。 MRP ( Material Requirement Planning ) - 资材所要量计划。 它的位置在下面的调达周期图上来看,就是右上角的 所要量决定那块儿。 MRP 的主要目的就是 确保品目的可用数量。 即按时调达生产及贩卖所需数量的品目。 MRP 常用于: - 监视在

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包