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

手推OpenGL相机的正交投影矩阵和透视投影矩阵(附源码)

概述

计算OpenGL的正交投影矩阵和透视投影矩阵是有现成函数的。自己手推不是为了重复造轮子。手推一遍,可以极大的加强对这两个矩阵的理解。同时也可以满足一下自己求知欲。

正交投影矩阵手推

正交投影矩阵源码

WGMatrix4x4 WGMatrix4x4::BuildOrtho(double l, double r, double b, double t, double n, double f) {WGMatrix4x4 matrix;double w = r - l;double h = t - b;double d = f - n;matrix.m_elements[0][0] = 2 / w;matrix.m_elements[0][1] = 0;matrix.m_elements[0][2] = 0;matrix.m_elements[0][3] = -(r + l) / w;matrix.m_elements[1][0] = 0;matrix.m_elements[1][1] = 2 / h;matrix.m_elements[1][2] = 0;matrix.m_elements[1][3] = -(t + b) / h;matrix.m_elements[2][0] = 0;matrix.m_elements[2][1] = 0;matrix.m_elements[2][2] = -2 / d;matrix.m_elements[2][3] = -(f + n) / d;matrix.m_elements[3][0] = 0;matrix.m_elements[3][1] = 0;matrix.m_elements[3][2] = 0;matrix.m_elements[3][3] = 1;matrix.m_type = WGMatrix4x4Type::TRS;return matrix;
}

透视投影矩阵手推

透视投影矩阵源码

WGMatrix4x4 WGMatrix4x4::BuildFrustum(double l, double r, double b, double t, double n, double f) {WGMatrix4x4 matrix;double w = r - l;double h = t - b;double d = f - n;matrix.m_elements[0][0] = 2 * n / w;matrix.m_elements[0][1] = 0;matrix.m_elements[0][2] = (r + l) / w;matrix.m_elements[0][3] = 0;matrix.m_elements[1][0] = 0;matrix.m_elements[1][1] = 2 * n / h;matrix.m_elements[1][2] = (t + b) / h;matrix.m_elements[1][3] = 0;matrix.m_elements[2][0] = 0;matrix.m_elements[2][1] = 0;matrix.m_elements[2][2] = -(f + n) / d;matrix.m_elements[2][3] = -2 * f * n / d;matrix.m_elements[3][0] = 0;matrix.m_elements[3][1] = 0;matrix.m_elements[3][2] = -1;matrix.m_elements[3][3] = 0;matrix.m_type = WGMatrix4x4Type::Unknown;return matrix;
}
http://www.dtcms.com/a/288800.html

相关文章:

  • 【AI】文生图文生视频
  • 第三章自定义检视面板_创建自定义编辑器类_编辑器操作的撤销与恢复(本章进度3/9)
  • 使用pnpm安装项目的生产依赖dependencies和开发依赖devDependies及pnpm工作空间等简单使用方法说明
  • Function
  • Qwen3-8B 与 ChatGPT-4o Mini 的 TTFT 性能对比与底层原理详解
  • Docker实战:使用Docker部署envlinks极简个人导航页
  • Springboot美食分享平台
  • 【Kafka】深入理解 Kafka MirrorMaker2 - 实战篇
  • Mac m系列 VMware Fusion虚拟机安装ARM contos
  • host.equiv,.rhosts,inetd.conf文件的作用
  • Python应用进阶DAY10--模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘beautifulsoup4’问题
  • 响应式编程入门教程第九节:UniRx 高级特性与自定义
  • python doipclient库
  • 学习C++、QT---30(QT库中如何自定义控件(自定义按钮)讲解)
  • XSS知识总结
  • Ajax简单介绍及Axios请求方式的别名
  • MyBatis从浅入深
  • SQL中的EXPLAIN命令详解
  • python的pywebview库结合Flask和waitress开发桌面应用程序简介
  • HarmonyOS 网络请求优化实战指南:从0到1写出流畅不卡顿的应用!
  • `tidyverse` 中涉及的函数及其用法
  • [Python] -项目实战8- 构建一个简单的 Todo List Web 应用(Flask)
  • 非线性优化框架CasADi工具箱求解最优控制问题OCP
  • Python Web框架详解:Flask、Streamlit、FastAPI
  • Python知识点2-if语句
  • 学成在线项目
  • 威力导演 12:革新级影音创作平台——专业特效与极致效率的完美融合
  • 【成品设计】STM32户外便携太阳能充电器设计
  • 看板如何体现任务完成标准