OpenGL: 视图矩阵的推导

2023-11-14

OpenGL: 视图矩阵的推导

2014年03月04日 11:08:45

阅读数:6525

     把物体从世界坐标系转化到视点坐标系的矩阵称为视图矩阵。

     下面我们先看下opengl视图矩阵的推导过程:

     假设视点或camera的局部坐标系为UVN,UVN分别指向右方、上方和后方从而构成右手坐标系,视点则局部坐标系处于坐标原点。

     就如OpenGL的函数OpenGL的gluLookAt(eyex, eyey, eyez, lookatx, lookaty, lookatz, upx, upy, upz)一样,给定视点、观察点、以及up向量,现在我们来求得视图矩阵。

1、首先我们来求得N = eye – lookat,并把N归一化。

2、up和N差积得到U, U= up X N,归一化U。

3、然后N和U差积得到V

image

      假设视点坐标系初始和世界坐标系重合,它先进行一个旋转变化,然后再进行一个平移,得到现在是视点位置和方位。则此时进行的矩阵变化为image,其中T是平移变化,R是旋转变化,而相机变换是相机本身变换的逆变换。

image

T的逆矩阵为:

image

     当相机变换进行完Inverse Translation这一步之后,相机的原点和世界原点就重合了,也就是处理完了关于平移的变换。

     我们要把一个世界坐标系点K(Kx, Ky, Kz),表示成(U,V,P)坐标系的点(假设此时,已经经过平移操作,摄像机在世界坐标系的原点),则其公式为:

Lx = Kx * Ux + Ky * Uy + Kz * Uz;

Ly = Kx * Vx + Ky * Vy + Kz * Vz;

Lz = Kx * Px + Ky * Py + Kz * Pz

则转化矩阵为(OpenGL使用列向量,右乘)

image

则完整的公式为:image

 

      以上是opengl的视图矩阵,对于d3d,由于使用行向量,左乘,以及左手坐标系,所以视图稍有不同,在D3D11教程中,曾加做过推导:

http://www.cnblogs.com/mikewolf2002/archive/2012/03/11/2390669.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL: 视图矩阵的推导 的相关文章

  • python对离散功率点进行积分得到电耗

    data pd read csv r C Users EDY Desktop csv data from scipy integrate import trapz scipy integrate trapz y x scipy integr
  • PCL 将对象模板与点云对齐

    目录 一 算法概述 二 代码实现 三 结果展示 四 相关链接 五 实验数据 一 算法概述 这是PCL官网给出的一个模版匹配教程 用来说明如何将其他教程中介绍的一些工具结合起来解决一个更高层次的问题 即将以前捕获的对象模型与一些新捕获的数据对
  • 红黑树(算法导论版)

    1 定义 1 每个节点是红色或者黑色的 2 根节点是黑色的 3 所有叶子结点 NIL 都是黑色的 4 如果一个节点是红色 则它的两个子节点都是黑色的 5 对每个节点 从该节点到其所有后代叶节点的简单路径上 均包含相同数目的黑色节点 2 性质
  • 飞行汽车比无人驾驶更早到来?清华猛狮团队研制出陆空两栖自主驾驶飞车

    清华猛狮无人驾驶实验室一年前启动无人驾驶飞车研制项目 一年时间内 第一代研发样机已在河北清华发展研究院固安分院与延庆山区试飞成功 了解无人车挑战赛的人 对清华猛狮无人智能车团队并不陌生 它是由清华大学车辆与运载学院和清华大学计算科学与技术系
  • Yarn介绍及快速安装 - Debian/Ubuntu Linux

    1 Yarn介绍 Yarn 是一个用于管理 JavaScript 包的快速 可靠和安全的包管理器 它是由 Facebook Google Exponent 和 Tilde 团队共同开发的 旨在提供比 npm 更快速 可靠的包管理体验 以下是
  • IBM小型机(AIX)技术手册(一)

    2007年7月 2008年7月在北京中软国际的工作时总结的IBM小型机技术手册 AIX基本命令 创建文件夹 Mkdir 名称 查看硬件信息 prtconf 查看卷组 lsvg o 查看进程 ps ef grep 名称 如 socket等 查
  • python模拟鼠标拖动滑块_Python+Selenium 拖动滑块 (一)

    在我们登录账号中常常会遇到各种验证码 如图片验证码 拖动滑块验证 滑块验证码只需要用户使用鼠标将滑块从某个位置拖动到另一个位置即可 程序通过记录用户拖动滑块的轨迹 这一串的轨迹数据采用模式识别的手段就可以判断出这是否是真人在操作 滑块验证通
  • 中标麒麟 docker安装及运行第一个实例

    一 下载安装包 选择适合版本 本次安装选择20 10 7 Index of linux static stable x86 64 二 安装 1 将下载的安装文件进行解压 命令如下 tar xzf docker 20 10 7 tar 2 将
  • 【Linux内核】cpu时间片的概念

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 cpu时间片的概念 时间片即CPU分配给各个程序的时间 每个线程被分配一个时间段 称作它的时间
  • 【mcuclub】PTC加热模块

    一 实物图 名称 PTC加热片 工作电压 5V 最大温度 180 功率 7 12W 是否防水 不防水 外部加热 名称 加热棒 工作电压 5V 最大温度 110 功率 7 10W 是否防水 防水 可直接放入水中 二 简介 PTC电加热器是一种
  • Linux命令自动补齐oh-my-zsh插件及美化主题超详细

    安装zsh 1 查看系统当前使用的shell echo SHELL 2 查看系统是否安装了zsh cat etc shells 3 用yum安装zsh yum y install zsh 4 查看shell列表 cat etc shells
  • [附源码]计算机毕业设计Python游戏交易平台(程序+源码+LW文档)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • C#中Socket的Accept()和BeginAccept()的区别

    C 中Socket的Accept 和BeginAccept 的区别 区别在于 Accept 是同步的 BeginAccept 是异步的 调用accept 或者BeginAccept 函数来接受客户端的连接 这就可以和客户端通信了 Begin
  • 五分钟学会一门编程语言?

    大家好 我是可乐 看到标题 不出意外的话 你肯定开始骂我了 标题党 什么编程语言五分钟就能学会 其实我本来也是不相信的 但是学过了才知道这是真的 1 Brainfuck 看到这个小标题 不要误会 我没有骂人 这就是今天文章的主人公 也就是让
  • 如何理解BIO、NIO、AIO的区别

    一 同步阻塞I O BIO 同步阻塞I O 服务器实现模式为一个连接一个线程 即客户端有连接请求时服务器就需要启动一个线程进行处理 如果这个连接不做任何事情会造成不必要的线程开销 可以通过线程池机制来改善 BIO方式适用于连接数目比较小且固

随机推荐

  • Leetcode 124. 二叉树中的最大路径和

    题目内容 给定一个非空二叉树 返回其最大路径和 本题中 路径被定义为一条从树中任意节点出发 沿父节点 子节点连接 达到任意节点的序列 该路径至少包含一个节点 且不一定经过根节点 示例 1 输入 1 2 3 1 2 3 输出 6 示例 2 输
  • 使用 js 实现 贷款计算器功能

    table tr th Enter Loan Data th td td th Loan Balance Interest Payments th tr tr td Amount of Loan td tr table
  • Java NIO介绍(二)————无堵塞io和Selector简单介绍

    无堵塞IO介绍 既然NIO相比于原来的IO在读取速度上其实并没有太大区别 因为NIO出来后 IO的低层已经以NIO为基础重新实现了 那么NIO的优点是什么呢 NIO是一种同步非阻塞的I O模型 也是I O多路复用的基础 而且已经被越来越多地
  • 【我的Java笔记】List集合中set()方法的使用

    方法 E set int index E element 首先看一下API里对List集合中的set 方法的描述 例 使用List集合中的set 方法进行冒泡排序 import java util ArrayList public clas
  • WebDriverException unexpectedly exited. Status code was: 2

    raise WebDriverException selenium common exceptions WebDriverException Message Service D Projects test geckodriver exe u
  • 计数器实现七分频

    七分频 即将输入信号的频率变为原来的七分之一 本文用计数器实现输入信号的七分频 一 画出七分频的时序逻辑 实现原理 图中用到了两个计数器 一个上升沿触发一个下降沿触发 且每当计数器从0计数到6时 复位 中间信号sig1 sig2分别在cnt
  • xhtml2pdf如何支持中文

    这段时间在做一个图片PDF的项目 需要把网页转换成PDF 找到了python的xhtml2pdf这个库 个方面都满意 只是对中文的支持不好 html上的中文转换成PDF后都成了乱码 貌似中文网站都没有找到合适的解决办法 只能求助于万能的go
  • 传统语音增强——基本的维纳滤波语音降噪算法

    一 维纳滤波的基本原理 基本维纳滤波就是用来解决从噪声中提取信号问题的一种过滤 或滤波 方法 它基于平稳随机过程模型 且假设退化模型为线性空间不变系统的 实际上这种线性滤波问题 可以看成是一种估计问题或一种线性估计问题 基本的维纳滤波是根据
  • error LNK2001: 无法解析的外部符号 “void __cdecl cv::cvtColor

    c 调用opencv时报错了 error LNK2001 无法解析的外部符号 void cdecl cv cvtColor 现在发现有两个可能的原因 原因1 没有添加lib库 需要添加lib库 VC 目录 包含目录 VC 目录 库目录 链接
  • 网络安全入门学习练手——CS伪装钓鱼网站

    文章目录 一 实验环境 二 使用工具和目标 三 开始复现 1 启动Cobalt Strike服务器端 打开Cobalt Strike客户端 2 设置监听器 3 网站克隆 4 在受害者端输入克隆网站对应的ip 5 测试 四 拓展 让钓鱼网址挂
  • 记录一次mac电脑安装git并在idea中使用的问题

    一 安装Git 下载地址 https sourceforge net projects git osx installer 点击下载最新版就可以了 下载速度很快的 下载完直接打开 默认安装即可 安装完成直接在命令行用root用户执行 git
  • L1-020 帅到没朋友(java)

    1 题目详情 当芸芸众生忙着在朋友圈中发照片的时候 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 输入第一行给出一个正整数N 100 是已知朋友圈的个数 随后N行 每行首先给出一个正整数K 1000 为朋友圈
  • gcc make makefile 的基本介绍

    一 gcc 1 在window操作系统下 编译工具用集成开发环境 在Linux操作系统下没有很好的集成环境 用的编译器是gcc 2 程序的编译分为四个阶段 由 c到可执行程序 1 预编译 2 编译 3 汇编 4 链接 3 编译程序 1 一步
  • PTAMM阅读笔记之SLAM概述(五)

    1 同时定位与地图创建允许机器人在未知环境中 依靠自身所带的传感器递增式地创建环境地图 并同时给出机器人所在位置 2 移动机器人的定位有两种类型 全局定位 绝对定位 Global Absolute Localization 和位置跟踪 Po
  • Mybatis3快速上手(详细)

    因为编辑器不互通 所以可以直接打开有道云看 有道云链接 Mybatis的初入 创建Maven项目工程 因为Mybatis属于数据访问层的操作 我们需要引入相关依赖 mysql mysql connector java 8 0 29 org
  • HashMap实现原理及扩容机制详解

    文章目录 一 HashMap基础 二 红黑树基础 三 HashMap实现原理 1 Node和Node链 2 拉链法 3 关于Node数组 table 4 散列算法 5 HashMap和红黑树 6 关于TreeNode 转自 这篇更详细 ht
  • UNext:基于 MLP 的快速医学图像分割网络

    UNext 会议分析 摘要 贡献 方法 整体框架 1 Shifted MLP 2 Tokenized MLP Stage 实验 1 对比实验 2 消融实验 2 1 模块的消融实验 2 2 通道数的探索 可借鉴参考 会议分析 期刊 会议 名
  • 前端常见难点面试题

    1 跨域 同源策略 同源策略 同源策略是浏览器的一个安全功能 不同源的客户端脚本在没有明确授权的情况下 不能读写对方资源 同源 就是协议 域名和端口号相同 降域 document domain 同源策略认为域和子域属于不同的域 如 chil
  • 《代码走查》杂记

    代码走查 一 定义 1 代码走查 code walkthrough 是一个开发人员与架构师集中与讨论代码的过程 代码走查的目的交换有关代码是如何书写的思路 并建立一个对代码的标准集体阐述 在代码走查的过程中 开发人员都应该有机会向其他人来阐
  • OpenGL: 视图矩阵的推导

    OpenGL 视图矩阵的推导 2014年03月04日 11 08 45 阅读数 6525 把物体从世界坐标系转化到视点坐标系的矩阵称为视图矩阵 下面我们先看下opengl视图矩阵的推导过程 假设视点或camera的局部坐标系为UVN UVN