当前位置: 首页 > 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.lryc.cn/news/594007.html

相关文章:

  • Java 大视界 -- Java 大数据在智能安防门禁系统中的权限动态管理与安全审计(353)
  • LeetCode第337题_打家劫舍III
  • 如何实战优化SEO关键词提升百度排名?
  • SQL Server(2022)安装教程及使用_sqlserver下载安装图文
  • python的pywebview库结合Flask和waitress开发桌面应用程序简介
  • Flink2.0学习笔记:Table API SQL
  • 基于单片机的智能家居安防系统设计
  • GaussDB 数据库架构师修炼(七) 安全规划
  • 【k8s集群管理平台】k8s运维管理的新玩法,让运维电脑随时不离身的现状成为过去
  • 基于机器视觉的迈克耳孙干涉环自动计数系统设计与实现
  • 后台管理系统登录模块(双token的实现思路)
  • 【硬件】GalaxyTabPro10.1(SM-T520)刷机/TWRP/LineageOS14/安卓7升级小白向保姆教程
  • ThinkPHP8极简上手指南:开启高效开发之旅
  • AXI接口
  • HTML和CSS快速入门
  • 相似度计算
  • Golang的微服务链路追踪
  • Unity笔记——Unity 封装方法指南
  • AS32X601 系列 MCU 硬件最小系统设计与调试方案探析
  • 神经网络:池化层
  • 从零开始开发纯血鸿蒙应用之跨模块路由
  • OpenCV 入门知识:图片展示、摄像头捕获、控制鼠标及其 Trackbar(滑动条)生成!
  • Ubuntu 24.04 设置静态 IP 的方法
  • Linux操作系统之线程(四):线程控制
  • HarmonyOS 启动提速秘籍:懒加载全链路实战解析
  • 反序列化漏洞4-Thinkphp5.4靶场安装及Thinkphp反序列化漏洞任意文件删除演示
  • 讲座|人形机器人多姿态站起控制HoST及宇树G1部署
  • python学智能算法(二十六)|SVM-拉格朗日函数构造
  • 什么是 ELK/Grafana
  • C#.NET EFCore.BulkExtensions 扩展详解