3D图形:坐标变换

引言

在3D图形学中,经常需要进行坐标变换的操作。所以,作为学习者,很有必要将坐标变换的原理掌握。在3D渲染流水线中,有很多的变换,基本上都是从一个坐标空间变换到另外一个坐标空间的。既然坐标变换在3D中用的如此的多,那么就应该详细的了解坐标变换的原理。这有助于我们理解3D流水线中的各种变换过程。

坐标变换

DirectX 9.0读书笔记(1)向量一文中,详细的讲述了如何将A坐标系里面的坐标点变换到B坐标系中去。这里直接使用文章的结论,即:如果我们在A坐标系中有一个向量或者点,那么如何用在B坐标系中表示这个向量或者点了?对于向量来说,假设在A坐标系中表示的向量为Q(x,y,z),而A坐标系的三个基坐标在B坐标系中分别为U(ux,uy,uz),
V(vx,vy,vz)和W(wx,wy,wz),那么我们就可以用如下的公式得出Q向量在B坐标系里面的坐标为:Qb = x * U + y * V + z * W ; 由于向量可以平移,而点不可以平移,所以对于A空间中的点Q(x,y,z),我们的公式变成如下的:Qb = x * U + y * V + z * W + O,这里的O是A坐标系的原点在B坐标系中的坐标表示。

好了,通过上面的公式,我们就自然的知道了如何进行坐标变换了吧。

坐标变换的矩阵表示

我们知道,在3D流水线中,大多数时候,都是使用矩阵来进行坐标变换。所以,我们很有必要知道,如何通过上面的结论来构造一个矩阵,从而将坐标变换到我们想要的空间中去。

在讲述矩阵的坐标变换表示之前,我们先来看下:向量和矩阵的乘法运算。

注意,这里使用的行向量,所以向量和矩阵的乘法运算,只能是(向量 * 矩阵),而不是(矩阵 * 向量)。不同的表示方法,对于构造出来的矩阵也是不同的,大家需要自己区分。

向量Q(x,y,z)和一个3*3的矩阵M =
,其结果为Q * M = x * U + y * V + z * W .

看到这个结果你是否想到了什么?没错,对于向量空间变换,我们只要将对应的坐标基的表示如上面例子中的U,V,W,按照矩阵M的表示方法表示起来就可以了。然后使用向量乘以这个矩阵,就能够得到变换后的坐标了。

但是,我们还要考虑一点,上面的公式中,似乎只能对向量进行变换,如果是点的话,就没有办法了。所以,很自然的,我们想到要使用齐次坐标来表示。齐次坐标,与普通的3D坐标相比,多了一个分量。即Q(x,y,z ,w)。这里的w取值为0的时候,表示这个Q表示的是一个向量,如何w为1,表示的就是Q表示一个点。那么,矩阵也要做相应的改变哦。

对于上图中的矩阵,只要将它变成4*4的齐次矩阵就可以了。熟悉D3D的同学,应该知道我说的是下面这样的矩阵:

好了,这样就大功告成了。我们的坐标变换的矩阵表示方法就是这样的了。

3D图形:坐标变换,布布扣,bubuko.com

时间: 2024-10-12 09:14:02

3D图形:坐标变换的相关文章

3d图形的概念跟渲染管线

GPU和Shader技术的基础知识(全8回) http://www.opengpu.org/forum.php?mod=viewthread&tid=7376&extra=page%3D1 http://www.opengpu.org/bbs/forum.php?mod=viewthread&tid=7550&extra=page%3D1 3D图形的概念和渲染管线(Render Pipeline) 前面介绍了3D图形历史,接下来要解说的是3D图形的处理流程. 3D图形管线的

向经典致敬,WHY翻写3D图形程序 [开源]

个人认为学习3D图形程序开发,有两套经典教程.D3D的<D3D游戏开发编程基础>也就是红龙那本书.OpenGL的NEHE教程.为向经典致敬,将我之前翻写他们的程序开源. 我所做的工作是将其所有的DEMO集成到一个项目中.所有的DEMO使用同一个渲染设备.这样可以在一个进程中自由地切换DEMO.写这套东西最大的麻烦是,每一个DEMO对渲染设备状态做出的改变,在其退出时需要恢复回去.这看上去很容易,但当出现问题时查起来却很麻烦,因为教程中的DEMO实在是太多了.最常见的问题是渲染效果不对了,这在搞

(转载)3D 图形编程的数学基础(2) 矩阵及其运算

原文地址:http://blog.csdn.net/vagrxie/article/details/4974985 版权声明:本作品由九天雁翎创作,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可.http://www.jtianling.com 目录(?)[+] write by 九天雁翎(JTianLing) -- blog.csdn.NET/vagrxie 讨论新闻组及文件 Technorati 标签: 3D,matrix,irrlich,D3D,DirectX,math 矩阵

cad动态的2D/3D图形控件VectorDraw Developer Framework (VDF)

VectorDraw Developer Framework (VDF)为您的应用程序增加动态的2D/3D图形.是一个可轻松创建爱你和管理及打印2D和3D图形的构件. 其对象可显示与大多数公共矢量格式和其他CAD对象兼容的方法和属性. 支持10多种矢量格式和多种离散格式.VectorDraw Developer Framework (VDF) 是完全基于对象的和支持 .NET 2的. 此构件是用.NET 2005 C# 代码写成的. 同时还提供了一个ActiveX组件. 此ActiveX组件为旧

(转载)3D 图形编程的数学基础(3) 矩阵基本变换

原文地址:http://blog.csdn.net/vagrxie/article/details/5016143 版权声明:本作品由九天雁翎创作,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可.http://www.jtianling.com 目录(?)[+] write by 九天雁翎(JTianLing) -- blog.csdn.NET/vagrxie 讨论新闻组及文件 这里开始,是真正的与3D图形编程相关的知识了,前两节只能算是纯数学. 平移矩阵 要想将向量(x, y,

【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(1)

http://www.4gamer.net/games/216/G021678/20140703095/ 新连载「实验做出的游戏图形」,是聚焦在特定游戏的图形上, 对它的结构和使用的技术解说为主旨.之前笔者连载的「西川善司的3D游戏入迷」,覆盖范围都很广,而与特定游戏强关联的技术解说,会在今后的新连载中处理. 作为纪念的第一回选择的,是Arc System Works开发的,2014年2月在街机上运作的格斗游戏「GUILTY GEAR Xrd -SIGN-」 全3D图形的GUILTY GEAR

【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY GEAR Xrd -SIGN-」解说的后篇送到了.前篇的最后预告的那样,本回,是只能看到Anime的3D图形的2D格斗游戏产生所采用的细小方法为中心的介绍. 变形的几何体,替换几何体 GUILTY GEAR Xrd -SIGN-的图形,看上去是Cel Anime风格,并不是什么都采用Toon Shader.这

3D图形图像处理软件HOOPS介绍及下载

HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了多边形优化和大模型处理等技术,能够大大提高 3D可视化的性能.同时,HOOPS开发包中提供的大量应用程序级的实例源码,帮助您在很短的时间内搭建出商业级的3D图形应用程序. HOOPS 3D Application Framework (HOOPS/3dAF) 3D图形图像处理软件为当今许多主流 3D

理解 Android 2D/3D 图形架构

首先理解Android 的 egl 的函数调用,先要得到display (对应显示器),而后选择一个支持的config(这是显卡支持的),而后创建WindowSurface, 还要创建context (context 相当于 opengl 这个状态机), 而后就可以调用 gl 的绘图函数在Surface上画图, 工作完成后需要释放 Context, windowSurace这些资源 Android 3D 图形架构如下 当用户使用 GLSurfaceView 的时候,会调用egl 的函数,创建出G