坐标变换,空间变换的本质
坐标变换或空间变换,本质是相对坐标的变化,绝对坐标没变。
世界空间有两个物体A,B。将A变换到B的坐标空间意思是:将A从世界空间变换到B的局部坐标空间,也就是在B的局部坐标系中重新表示A的坐标(也就是求出A在B坐标系中的相对坐标)
做法很简单:
1,A - B 得到一个向量 V,
2,把V分解(投影)到B的局部坐标的各轴上,一般用单位向量的点乘实现,因为点乘表示投影,即 x = dot(V, X), y=dot(V, Y), z=dot(V, Z),X,Y,Z是B坐标系的三个轴
得到的结果就是A在B的局部坐标系中的坐标,物体A也就变换到了物体B的局部坐标系中,简称为A变换到了B的空间中。
在游戏引擎开发中最常用的几种变换:
例1,渲染管线中为了渲染物体,将物体变换到相机空间
例2,渲染阴影贴图shadow map时,将相机变换到灯光空间
原理如此,由上可以推导出一个变换矩阵,直接将1,2两上步骤合为一个矩阵,推导如下:
1, A - B 得到向量V用矩阵表示就是 A乘以一个平移矩阵m,其中m[3][0]=B.x, m[3][1]=B.y, m[3][2B.z,如下
A - B = A * m,其中m为:
m = 1 0 0 0
0 1 0 0
0 0 1 0
B.x B.y B.z 1
2,将向量 V 分解(投影)到 B的局部坐标系的各轴上(X, Y, Z三个轴坐标基分别right, up, look向量)
x = dot(V, right)
y = dot(V, up)
z = dot(V, look)
那么表示成向量与矩阵的乘法就是如下:
V * right.x up.x look.x 0 = V * m1
right.y up.y look.y 0
right.z up.z look.z 0
0 0 0 1
将1,2两步合起来:
A * m * m1 =
A* 1 0 0 0 * right.x up.x look.x 0 = A * right.x up.x look.x 0
0 1 0 0 right.y up.y look.y 0 right.y up.y look.y 0
0 0 1 0 right.z up.z look.z 0 right.z up.z look.z 0
B.x B.y B.z 1 0 0 0 1 dot(B, right) dot(B, up) dot(B, look) 1
= A * view
其中view也就是常说的视图矩阵,由此可以看出,视图矩阵不是相机变换的专利,而是所有物体都具有的一种旋转加平移的变换。
这也就是U3D中 Transform.lookAt的原理,就是说每个物体都有一个视图变换矩阵,包括相机,灯光。这样我们就明白了什么是【变换到灯光空间】这个难以理解的概念
坐标变换,空间变换的本质相关推荐
- Opencv——几何空间变换(仿射变换和投影变换)
几何空间变换 [1]几何变换(空间变换)简述 [2]变换矩阵知识简述 齐次坐标的概念 几何运算矩阵 [3]图像的仿射变换 1.平移变换 2.比例缩放 3.旋转 4.对称变换(不做展示) 1.关于X轴变 ...
- 点的空间变换与坐标系的空间变换
博主小白,分享一下自己对于点变换和坐标系变换的理解,不对的地方请大家指出~ 目录 坐标系变换 点变换 KITTI数据集中的坐标系关系 参考 坐标系变换 以最简单的坐标系变换为例,如下图 图中有两个坐标 ...
- 空间变换网络--spatial transform network
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011961856/article/details/77920970 CNN分类时,通常需要考虑输入 ...
- Unity Shader入门精要笔记(四):矩阵与空间变换
本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/73612170 上一篇我们学习 ...
- 图像坐标空间变换:透视变换(Perspective Transformation),或称为单应性(Homography)变换
文章目录 透视变换简介 预备知识 透视变换公式推导 投影 二维坐标向齐次坐标的变换 公式求解 例子:A4纸视角校正 原始图片和坐标变换模板 计算程序 结果 透视变换的限制 前向映射与后向映射矩阵不互逆 ...
- 二维坐标系空间变换(详细解读,附MATLAB代码)
二维坐标系空间变换 参考链接: 代码资源: 假如存在任意两个二维坐标系,如下图所示: 目的:将xoy坐标系经过处理变换到XOY坐标系. 经过分析可知:对于二维平面上的变换需要 x y 方向上两个平移参 ...
- (二)unity自带的着色器源码剖析之——————UnityCG.cginc文件(上篇:数学常数、颜色空间常数和函数、顶点布局格式结构体、进行空间变换的函数、HDR级光照贴图编解码相关函数等)
一.数学常数 unity3D内置着色器定义了一系列的数学常数,如下: 从第3行开始,第13行结束: #ifndef UNITY_CG_INCLUDED #define UNITY_CG_INCLUDE ...
- 【图像处理】空间变换
概念 在图像处理中的空间变换(spatial transformation)分成两种情况,有仿射变换(Affine Transformation)及投影变换(Perspective Transform ...
- pytorch空间变换网络
pytorch空间变换网络 本文将学习如何使用称为空间变换器网络的视觉注意机制来扩充网络.可以在DeepMind paper 有关空间变换器网络的内容. 空间变换器网络是对任何空间变换的差异化关注的概 ...
最新文章
- dubbo 单元测试_技术分享——一路踩坑构建Dubbo源码
- Interface实现多态简例
- linux 7修改yum源,CentOS 7修改yum源为阿里源
- mysql jdbc字符编码_java中jdbc/sql出现编码问题
- Java 反射 mdc失效,log4j中MDC使用陷阱
- 如何得到当前浏览器是什么
- 惊爆:各大 App 可直接打开小程序!微信收割移动互联网的时间开始了
- C#多线程之线程池篇1
- 对Javascript“闭包”的简单理解
- 权威认证闭环 | 国内首家DevSecOps体系全栈产品通过CWE国际兼容性认证
- Maya---2018up4 Python 开发环境配置(win10x64)
- 如何对 Excel 中的数据使用 SQL 查询
- 全国企业信用信息公示系统
- 笨鸟的平凡之路-KETTLE的安装
- NOIP切题注意事项
- 开源免费的WEB应用防火墙
- 微信JSAPI支付 - 服务商模式下子商户 统一下单的注意事项
- 华为mate40RS能升级鸿蒙,华为mate40rs快速开箱
- C++(分数类,进行加减乘除的运算并化简)
- Linux/Centos: 开源库uthash第一弹uthash.h