坐标变换理解

1.简化变换的思想:

使用惯性坐标系(惯性坐标系是世界坐标系平移到物体坐标系的位置)可以简化物体-世界,世界-物体,或者说任何两个坐标系间的转换做一个中间的转换,使问题变得简单。使用嵌套坐标系(父坐标系-子坐标系-子坐标系)也可以分解问题,简化复杂的变换逻辑。其实把问题简单化思考的方法,不外乎实例化,拆分它,转换它,再组合转换抽象回来,就可以很elegant的解决问题了。

很多物体间的方位和运动,需要在同一个坐标系中才能进行,以及渲染管道中本身要求多坐标系间转换来实现渲染。

2.物体变换和坐标系变换的联系区别:

将物体进行变换(例如把物体坐标系当做世界坐标系而不变,那么物体进行世界坐标系看到的要求进行旋转平移变换),等价于相反的顺序相反的量变换物体坐标系(例如把物体定住不变,那么需要坐标系进行相反的先相反方向平移相反方向旋转的变换)。其实变换了坐标系也会将坐标内所有的物体重新计算位置,
只是有时候那种更加合适那么使用那种变换,一般的是思考问题时是变换物体,但是实际中是变换物体坐标系(假定物体不变),因为变换坐标系更加方便处理多个坐标系间的变换,最终物体只需要重新计算位置一次。

3.嵌套坐标系,针对坐标系间的双向变换:

物体到世界先进行缩放(前后嵌套的改变轴大小受轴走向和原点影响)旋转(改变轴走向受原点影响)后进行平移(改变原点,不受轴大小和轴走向影响),世界到物体先进行相反的平移后进行相反的旋转,其它坐标系间相互转换也符合该规律。相反的顺序主要是因为矩阵的组合变换求逆的要求。

4.实例:

D3DXMatrixLookAtLH函数体现了世界-观察坐标系的转换:

D3DXVECTOR3 position(0.0f, 0.0f, -5.0f);//camera在世界坐标系中的位置向量

D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);//target是camera需要平移到的且旋转所在的点,可以是原点,也 可以是其它观察点

D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);//定义向上的方向,一般是[0,1,0]

D3DXMATRIX V;

// V是world-to-view空间的变换矩阵,内部会计算世界坐标系到观察坐标系的变换(物体假设不变),

// 其实新的坐标系下所有物体的位置时重新计算了的。

D3DXMatrixLookAtLH(&V, &position, &target, &up);

Device->SetTransform(D3DTS_VIEW, &V);//设置变换的状态,实际变换时,摄像机和摄像机内的物体会被一起变换。

返回的新坐标系是:

zaxis = normal(At - Eye)

xaxis = normal(cross(Up, zaxis))

yaxis = cross(zaxis, xaxis)

xaxis.x           yaxis.x           zaxis.x          0

xaxis.y           yaxis.y           zaxis.y          0

xaxis.z           yaxis.z           zaxis.z          0

-dot(xaxis, eye)  -dot(yaxis, eye)  -dot(zaxis, eye)  1

时间: 2024-08-04 00:43:16

坐标变换理解的相关文章

说说我对OpenGL坐标变换几个关键点的理解

刚接触OpenGL的朋友们,可能对坐标变换不太理解. 本人不才, 接触了三维一段时间后,冒昧说说我的理解, 如有偏差, 请指正. 一:  首先说说什么是世界坐标. 每个三维模型都有自己的局部坐标, 这个大家都好理解,  这个称作模型坐标, 坐标原点可以是模型的中心.   但是一个场景中如果有许多个三维模型,  那要想标准其每个位置, 就需要一个统一的坐标来标定,  那么这个坐标就叫世界坐标.  这都好理解对吧,  下面说点难的. 二:  再说说世界坐标怎么转换到摄像机坐标. 我们知道,  观察三

OpenGl学习之坐标变换(上)

      坐标变换是深入理解三维世界的基础,非常重要.学习这部分首先要清楚几个概念:视点变换.模型变换.投影变换.视口变换. 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,因此我们要将三维物体用二维数据表示出来,这一联系的点就是坐标.在OpenGL三维空间中坐标的形式有两种:世界坐标系和局部坐标系. ①世界坐标系:始终固定不变.举例,以太阳系中心太阳为中心原点,建立世界坐标系的话,地球绕太阳的公转运动是世界坐标的变换. ②局部坐标系:物体本身的中心.地球的自

3D图形:坐标变换

引言 在3D图形学中,经常需要进行坐标变换的操作.所以,作为学习者,很有必要将坐标变换的原理掌握.在3D渲染流水线中,有很多的变换,基本上都是从一个坐标空间变换到另外一个坐标空间的.既然坐标变换在3D中用的如此的多,那么就应该详细的了解坐标变换的原理.这有助于我们理解3D流水线中的各种变换过程. 坐标变换 在DirectX 9.0读书笔记(1)向量一文中,详细的讲述了如何将A坐标系里面的坐标点变换到B坐标系中去.这里直接使用文章的结论,即:如果我们在A坐标系中有一个向量或者点,那么如何用在B坐标

骨骼蒙皮动画中的坐标变换

背景知识 模型视图变换 OpenGL没有视图矩阵,只有模型视图矩阵,一般游戏引擎都会抽象出视图矩阵的. 总的变换为: v` = projection * view * mode * v; 父子节点变换 v` = worldMatrix * v = (parentWorldMatrix * localMatrix) * v; 骨骼变换 其实真正表示的关节,而不是骨头,只是骨头比较好理解. 默认姿态网格对象坐标空空变换到骨骼局部坐标空间(offsetMatrix). 完了后又从骨骼空间变换回动画姿态

3D 坐标变换 公式 推导

[ 更新 ]更好的方法见[用抽象代数讨论仿射变换和仿射空间中的坐标变换] ,以下是之前的内容. 以下的推导 结论是正确的,可是过程有点懵. 以下使用行向量: e1=(1,0,0) e2=(0,1,0) e3=(0,0,1) i, j, k是三个线性无关的向量.它们在e1,e2,e3坐标系下的坐标也记作i,j,k i', j', k'是三个线性无关的向量,它们在e1,e2,e3坐标系下的坐标也记作i', j', k' denote???ijk???=A,???i′j′k′???=B 已知点P相对于

OpenGL中坐标系的理解(一)

在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODELVIEW(模型视图矩阵)的个人理解. 在OpenGL中空间中点的三维坐标是使用行向量表示的,虽然与列向量相比存储结构并没有发生变化,但在坐标变换(即矩阵乘法)中会有很大不同.大家都知道一个4X4的矩阵可以表示三维坐标的平移,旋转变换.例如一矩阵R表示一个旋转加平移变换,空间中一点P(x, y, z)

坐标系、坐标参照系、坐标变换、投影变换

在<地图投影为什么>一文,我大略说了下为什么需要地图投影,投影坐标系需要哪些参数,这些参数(如椭球体.基准等)是做什么的.这篇就深入的谈些地图投影相关的一些概念,各种定义参考OGC标准<Spatial Reference by Coordinates>.进一步的话会介绍下开源投影库和商业软件投影相关的知识. 坐标系(coordinate system.CS):由两个.三个甚至更多个坐标轴,单位标度等组成,使得可利用数学法则计算距离.角度或其他几何元素.如坐标轴相互垂直的笛卡尔(Ca

OpenGL图形管线和坐标变换[转]

1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Transformation).做个比喻,计算机图形开发就像我们照相一样,目的就是把真实的场景在一张照相纸上表现出来.那么观测变换的过程就像是我们摆设相机的位置,选择好要照的物体,摆好物体的造型.而投影变换就像相机把真实的三维场景显示在相纸上一样.下面就分别详细的讲一下这两个过程. 1.1模型观测变换 让我们先来弄清楚OpenGL中的渲

OpenGL坐标变换专题

OpenGL坐标变换专题(转) OpenGL通过相机模拟.可以实现计算机图形学中最基本的三维变换,即几何变换.投影变换.裁剪变换.视口变换等,同时,OpenGL还实现了矩阵堆栈等.理解掌握了有关坐标变换的内容,就算真正走进了精彩地三维世界. 一.OpenGL中的三维物体的显示 (一)坐标系统 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,将三维物体及二维数据联系在一起的唯一纽带就是坐标. 为了使被显示的三维物体数字化,要在被显示的物体所在的空间中定义一个坐标系