视图矩阵的推导-opengl应用
把物体从世界坐标系转化到视点坐标系的矩阵称为视图矩阵。
下面我们先看下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
假设视点坐标系初始和世界坐标系重合,它先进行一个旋转变化,然后再进行一个平移,得到现在是视点位置和方位。则此时进行的矩阵变化为,其中T是平移变化,R是旋转变化,而相机变换是相机本身变换的逆变换。
T的逆矩阵为:
当相机变换进行完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使用列向量,右乘)
则完整的公式为:
以上是opengl的视图矩阵,对于d3d,由于使用行向量,左乘,以及左手坐标系,所以视图稍有不同,在D3D11教程中,曾加做过推导:
http://www.cnblogs.com/mikewolf2002/archive/2012/03/11/2390669.html
http://www.cnblogs.com/mikewolf2002/archive/2012/11/25/2787636.html
视图矩阵的推导-opengl应用的更多相关文章
- 右手坐标系下LookAt视图矩阵的推导
基本知识 右手坐标系 右手手掌弯曲,手指方向由正X轴指向正Y轴,如果这时Z轴正方向与大拇指方向保持一致,坐标系为右手坐标系,否则为左手坐标系. 向量叉乘的方向 向量(1,0,0)与向量(0,1,0)叉 ...
- OpenGL(五) 三维变换之模型视图矩阵
计算机三维图形学中,一个基本的任务是如何描述三维空间中一个物体位置的变化,也就是如何 描述物体的运动.通常情况下,物体位置的变化包含三个基本的变化:平移.旋转和缩放,物体的运动也可以用这三个基本的运动 ...
- (转)投影矩阵的推导(Deriving Projection Matrices)
转自:http://blog.csdn.net/gggg_ggg/article/details/45969499 本文乃<投影矩阵的推导>译文,原文地址为: http://www.cod ...
- UFLDL深度学习笔记 (二)SoftMax 回归(矩阵化推导)
UFLDL深度学习笔记 (二)Softmax 回归 本文为学习"UFLDL Softmax回归"的笔记与代码实现,文中略过了对代价函数求偏导的过程,本篇笔记主要补充求偏导步骤的详细 ...
- WEBGL学习【四】模型视图矩阵
<html lang="zh-CN"> <!--服务器运行地址:http://127.0.0.1:8080/webgl/LearnNeHeWebGL/NeHeWe ...
- 3D中的相机 - 投影矩阵和视图矩阵
3D中的相机 - 投影矩阵和视图矩阵 3d游戏中,一般通过相机的设置来计算投影矩阵和视图矩阵,比如untiy和cocos,一般情况下我们不用关注如何计算, 可以直接在可视化的编辑器中调整参数就可以了, ...
- opengl视图变换 投影变换推导
视图变换在opengl中,视图变换的输入是:(1)眼睛位置(或者说相机位置)eys:(2)眼睛朝向的中心center,(就是眼睛朝哪里看);(3)头的方向up.任何一点经过视图变换后都会转化到眼睛坐标 ...
- OpenGL中投影矩阵的推导
本文主要是对红宝书(第八版)第五章中给出的透视投影矩阵和正交投影矩阵做一个简单推导.投影矩阵的目的是:原始点P(x,y,z)对应后投影点P'(x',y',z')满足x',y',z'∈[-1,1]. 一 ...
- [OpenGL](翻译+补充)投影矩阵的推导
1.简介 基本是翻译和补充 http://www.songho.ca/opengl/gl_projectionmatrix.html 计算机显示器是一个2D的平面,一个3D的场景要被OpenGL渲染必 ...
随机推荐
- UNIX网络编程读书笔记:图解TCP端口号和并发服务器
图1 TCP服务器在端口21上执行被动打开 图2 客户对服务器的 ...
- VMware Workstation的网络连接方式:NAT、桥接和Host Only
安装完VMware Workstation后会自动生成两个网络连接:VMware Network Adapter VMnet8 和 VMware Network Adapter VMnet1(通常称为 ...
- DB2删除重复数据
有时候DB2建表时不设置主键,就可能存在脏数据,例如:两条一样数据重复存在,这时候就需要将重复记录删除,然后留下一条记录. )); ----插入重复数据 ,'jack'); 插入数据后,结果如下图: ...
- Bootstrap 3 Menu Generator
Bootstrap 3 Menu Generator
- Web中路径问题
如果在web项目中需要使用路径,如:转发.重定向还有超链接等. 原则:”一切web路径以/开始” 那么/的路径一定是相对路径,那么/到底代表哪一个相对路径是需要智慧的. 如果该路径是给服务器使用的,那 ...
- IIS发布.net core mvc web站点
这里只有操作步骤! 第一.查看IIS是否安装了 AspNetCoreModule,查看路径:IIS->模块 查看 安装步骤 下载网址:https://www.microsoft.com/net/ ...
- RMAN检查数据库physical/logical corruption
1.检测physical corruption RMAN> backup validate database archivelog all; 2.检测logical corruption RMA ...
- 使用原生SQL返回实体类具体实现详情
注:可以直接复制粘贴,欢迎提出各种问题,谢谢! 因为网上查询大都是相同的,自己做时发现很多不懂,摸索了很久才弄懂,所以写了这个例子,比较容易看懂吧. 使用原生SQL查询并将结果返回实体中: (1)因为 ...
- Windows下phpStudy中的Apache无法启动的排查方法
尝试一:检查端口占用问题 刚开始以为是端口占用,使用 phpStudy 自带的端口检测,查看并没有占用.在 cmd 控制台中输入:services.msc 去系统服务里面看,单独配置的 Apache ...
- vim的窗口切换
当用vim写代码的时候,我喜欢一边看着头文件中结构的定义,一边编写实现的代码,这样就经常用到多窗口来编辑,查看文档. 1.同时打开多个文件,并横向排列 vim -o t.c t.h 2.同时打开多个文 ...