坐标变换,空间变换的本质

坐标变换或空间变换,本质是相对坐标的变化,绝对坐标没变。

世界空间有两个物体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   = A * view

     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

其中view也就是常说的视图矩阵,由此可以看出,视图矩阵不是相机变换的专利,而是所有物体都具有的一种旋转加平移的变换。

这也就是U3D中 Transform.lookAt的原理,就是说每个物体都有一个视图变换矩阵,包括相机,灯光。这样我们就明白了什么是【变换到灯光空间】这个难以理解的概念

原文地址:https://www.cnblogs.com/timeObjserver/p/11386672.html

时间: 2024-08-30 04:44:08

坐标变换,空间变换的本质的相关文章

OpenGL中的空间变换

OpenGL中的空间变换 在使用OpenGL的三维虚拟程序中,当我们指定了模型的顶点之后,在屏幕上显示它们之前,一共会发生3种类型的变换:视图变换.模型变换.投影变换. 视图变换:指定观察者(摄像机)的位置: 模型变换:在场景中移动物体: 投影变换:改变可视区域的大小: 视口变换:这是一种伪变换,它对窗口上的最终输出进行缩放. 视觉坐标 它表示一种虚拟的固定坐标系统,通常作为一种参考系使用.它是根据观察者(摄像机)的角度而言的,与可能发生的变换无关.我们接下来所讨论的所有变换都是根据它们相对于视

Spatial Transformer Networks(空间变换神经网络)

Reference:Spatial Transformer Networks [Google.DeepMind]Reference:[Theano源码,基于Lasagne] 闲扯:大数据不如小数据 这是一份很新的Paper(2015.6),来自于Google旗下的新锐AI公司DeepMind的三位剑桥Phd研究员. 他们针对CNN的特点,构建了一个新的局部网络层,称为空间变换层,如其名,它能将输入图像做任意空间变换. 在我的论文[深度神经网络在面部情感分析系统中的应用与改良]中,提出了一个有趣观

PIE SDK彩色空间变换

1. 算法功能简介 使用彩色空间变换工具可以将三波段红.绿.蓝图像变换到一个特定的彩色空间,并且能从所选彩色空间变换回 RGB.两次变换之间,通过对比度拉伸,可以生成一个色彩增强的彩色合成图像.此外,颜色亮度值波段或亮度波段可以被另一个波段(通常具有较高的空间分辨率)代替,生成一幅合成图像(将一幅图像的色彩特征与另一幅图像的空间特征相结合). 彩色变换的一般工作流程:选择波段进行 RGB 合成显示→进行彩色变换→进行其他的图像处理→进行彩色逆变换→RGB 合成显示. PIE SDK支持算法功能的

纯干货:深度学习实现之空间变换网络-part2

https://www.jianshu.com/p/854d111670b6 纯干货:深度学习实现之空间变换网络-part1 在第一部分中,我们主要介绍了两个非常重要的概念:仿射变换和双线性插值,并了解到这两个概念对于理解空间变换网络(Spatial Transformer Networks)非常重要. 在这篇文章中,我们将详细介绍一篇空间变压器网络这一论文--Go ogle Deepmind的研究人员Max Jaderberg,Karen Simonyan,Andrew Zisserman和K

“生动”讲解——矩阵的空间变换

几何图形的矩阵表示: 我们把每个顶点坐标看成一个行向量,采用齐次坐标法,即每个顶点坐标增加一个相同的分量1作为矩阵的一行,这样就可以用矩阵表示图形了.如: 点A(1,-1),增加一个分量1,将其作为一个矩阵的行向量A=[1?11]; 以此类推,所以这个图形可以用矩阵来表示,即: P=?????131?2?113?21111????? 平移变换: 如果平移向量是(a, b),点(x, y)平移后的点为(x+a, y+b). 如下图所示: 平移变换矩阵: 平移变换矩阵为:???10a01b000??

KUKA机器人的空间变换问题

在kuka机器人系统的FRAME和POS数据结构包含六个参数:{X ,Y,Z,A,B,C}.这些参数正好对应角度坐标系表示中的六个参数, X,Y,Z,alpha,beta,gama,且alpha=A,beta=B,gama=C. 假设在机器人系统中,{A}是参考坐标系,{B}是工具坐标系,并且相对A的表示为{x,y,z,a,b,c},并且{B}坐标系统有一点BP,那么其在{A}下坐标AP可以表示为: AP =RxyzBP+APORG,其中 Rxyz=R(a).R(b).R(c),APORG=(x

由矩阵运算来看初等矩阵的左乘右乘所影响到矩阵的行列变换的本质(转)

Latex排版的,所以之上截图吧: 顶 0 踩

css3 关键帧动画 空间变换

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

[Unity Shader] 坐标变换与法线变换及Unity5新增加的内置函数

学习第六章Unity内置函数时,由于之前使用mul矩阵乘法时的顺序与书中不一致,导致使用内置函数时出现光照效果不一样,因此引出以下两个问题: 1 什么时候使用3x3矩阵,什么时候使用4x4矩阵? 2 法线变换矩阵与坐标变换矩阵不相同? 解答1: 4.9.1节书中讲述了何时使用3x3和4x4矩阵.因为4x4矩阵是比3x3矩阵多了平移变换,因此对空间坐标进行变换时,通常使用4x4矩阵.而对于切线和法线这两种空间矢量,不存在平移的情况,因此仅使用3x3矩阵即可(是否可以偷懒使用4x4矩阵?是可以的).