`
sogotobj
  • 浏览: 646582 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

3D几何流水线之模型变换

阅读更多

参考书:Real-time Rendering 2nd, 《3D游戏与计算机图形学中的数学方法》

最初,物体在模型空间中,通过模型变换改变了物体的位置和朝向,物体被变换到世界空间。

按照变换顺序,应该先旋转后平移,对于opengl的规则,是TR X V。
矩阵T,R都是4X4的,T中只有第4列有效,其他是单位阵的排列,R中是前3X3子阵有效,其他是单位阵排列,将TR相乘:

| 1 0 0 Tx | | Ux Vx Nx 0 | | Ux Vx Nx Tx |
| 0 1 0 Ty | X | Uy Vy Ny 0 | = | Uy Vy Ny Ty |
| 0 0 1 Tz | | Uz Vz Nz 0 | | Uz Vz Nz Tz |
| 0 0 0 1 | | 0 0 0 1 | | 0 0 0 1 |

可 见,在最后得到的4X4 TR矩阵中,等于是把3X3 UVN矩阵填到平移矩阵中,这两个矩阵相乘时互相没有影响对方。其实UVN表示坐标系的映射—用(1,0,0)T, (0,1,0)T, (0,0,1)T分别右乘UVN矩阵,得到的列向量正是UVN的3列,这就是说三个坐标轴被UVN矩阵变换到世界坐标系中了,而UVN的3列表示的正是 x,y,z轴在世界坐标系下的向量。

再加上缩放变换,先看一下R X S :

|Ux Vx Nx 0| | Sx 0 0 0 | | UxSx VxSy NxSz 0 |
|Uy Vy Ny 0| X | 0 Sy 0 0 | = | UySx VySy NySz 0 |
|Uz Vz Nz 0| | 0 0 Sz 0 | | UzSx VzSy NzSz 0 |
|0 0 0 1| | 0 0 0 1 | | 0 0 0 1 |

那么最终的 T X R X S就是:
| UxSx VxSy NxSz Tx |
| UySx VySy NySz Ty |
| UzSx VzSy NzSz Tz |
| 0 0 0 1 |

可见缩放矩阵的作用是分别对三个坐标轴进行缩放。这个4X4矩阵,第4列是平移变换,3X3部分是缩放和坐标轴变换。因为坐标轴是单位向量,所以求3X3每列的模就得到相应的缩放值。

如果是把物体从世界坐标空间变回到模型空间,那么逆矩阵就是:
(TRS)-1 = S-1 X R-1 X T-1
| 1/Sx 0 0 0 | | Ux Uy Uz 0 | | 1 0 0 -Tx | | Ux/Sx Uy/Sx Uz/Sx (U' dot -T) |
= | 0 1/Sy 0 0 | X | Vx Vy Vz 0 | X | 0 1 0 -Ty | = | Vx/Sy Vy/Sy Vz/Sy (V' dot -T) |
| 0 0 1/Sz 0| | Nx Ny Nz 0 | | 0 0 1 -Tz | | Nx/Sz Ny/Sz Nz/Sz (N' dot -T) |
| 0 0 0 1| | 0 0 0 1| | 0 0 0 1 | | 0 0 0 1 |

其中 U', V', N'是U,V,N分别乘以1/Sx, 1/Sy, 1/Sz
这个4X4的逆变换矩阵就不是没影响啦,第4列是U', V', N'和-T的点积,计算这种逆矩阵时要注意,不能直接填-T的!这个逆矩阵是不能直接“填”出来的,3X3部分每一行是逆缩放后的坐标轴,第4列是前面矩阵每一列和-T的点积

至于为什么UVN矩阵的逆就是他的转置,因为UVN是正交矩阵。坐标轴是一组正交基,向量空间中所有向量都可以用这组正交基线性表出。

分享到:
评论

相关推荐

    Direct3D中的三维坐标变换

    #### 二、顶点坐标变换和光照流水线 Direct3D中的图形显示过程通常被划分为两个主要阶段:坐标变换和光照阶段(Vertex Transformation and Lighting, VT&L)以及光栅化处理阶段(Rasterization)。这两个阶段是实现...

    计算机图形学-作业答案-几何图形流水线.doc

    - **几何图形流水线**:负责生成和处理三维空间中的几何图形,包括模型的构建、变换以及投影。 - **像素图形流水线**:处理经过投影后的二维几何图形,将其转换为最终可以在屏幕上显示的像素形式。 #### 二、几何...

    dx渲染流水线+depth in depth

    在计算机图形学领域,DirectX(DX)渲染流水线是实现高效3D图像生成的关键技术之一。DX渲染流水线是由微软开发的一套API,它允许程序员控制硬件加速的图形处理,极大地提高了游戏和图形应用的性能。本文将深入探讨DX...

    IOS应用源码之利用OpenGL固定流水线绘制球体.zip

    本压缩包"IOS应用源码之利用OpenGL固定流水线绘制球体.zip"包含了一个iOS应用的源代码示例,展示了如何使用OpenGL的固定功能流水线来绘制球体。 首先,我们来理解一下OpenGL的固定流水线。在早期的OpenGL版本中,...

    渲染流水线1

    转换过程中通常包括模型变换、视图变换和投影变换。 - 逐顶点光照:在此阶段,顶点的光照效果会被计算,这些计算可能包括环境光、漫反射光、镜面反射光等。 3. 曲面细分着色器(Tessellation Shader Stage): 在...

    C++编程系列之界面上实现3D文字

    10. **渲染流水线**:理解OpenGL的渲染流水线非常重要,它描述了从顶点数据到屏幕上像素的过程。这包括顶点处理、几何处理、光栅化和像素操作等阶段。 在实际编程过程中,你需要编写代码来加载字体、定义3D坐标、...

    计算机图形学复习资料

    2. 请简述几何图形流水线中各坐标系变换的功能。 3. 请简述视景坐标系与视景体的概念。 4. 请简述直线段像素化中DDA算法的原理。 5. 请简述走样与反走样的基本原理 6. 请简述环境光源的概念。 7. 请简述全局光照模型...

    Geometry Shader(Unity几何着色器)

    在Unity引擎中,几何着色器(Geometry Shader)是一种高级图形技术,用于处理图形流水线中的几何阶段。它允许开发者在GPU上自定义物体的几何形状,生成或修改额外的顶点,以此来实现各种复杂的视觉效果。这篇文章将...

    论文研究-图形加速器中几何变换的设计与实现.pdf

    针对图形加速器中几何变换的特性,提出其软件设计模型,并采用并行流水线的结构,用硬件设计和实现了图形加速器中的几何变换单元,提高了图形加速器的运行速度;最后将电路下载到FPGA开发板进行了验证。实验结果表明...

    利用OpenGL固定流水线绘制球体OpenGLTest功能ios源码.zip

    在固定流水线中,主要步骤包括顶点处理、几何变换、光照计算、投影和裁剪、纹理映射以及像素渲染等。 在本项目中,"OpenGLTest"可能是主程序文件或一个包含关键代码的类,它展示了如何使用OpenGL ES的固定流水线来...

    WPF 3D效果图片墙、翻转等效果.zip

    3. **3D几何形状**:在WPF中,你可以使用`MeshGeometry3D`类来定义基本的3D几何形状,如立方体、球体和锥体。通过定义顶点和面,可以构建复杂的3D模型。 4. **材质与光照**:3D物体的外观由材质和光照控制。`...

    计算机图形学-基于3D图形开发技术(1-7章)

    基于3D图形开发技术是计算机图形学的核心内容之一,它涉及到从几何建模到渲染输出等一系列复杂的过程。这份教学资料包括了1到7章的内容,通过PPT的形式为学习者提供了丰富的理论知识和实践指导。 1. 第一章:基础...

    Direct3D 9.0 SDK 文档(中文版)

    它涵盖了图形流水线的基本概念,这是一个将3D模型转化为2D屏幕上可见图像的过程。教程中包括了如何设置Direct3D环境、创建设备、处理顶点和渲染几何体等内容,这些都是构建3D应用程序的基础。 Direct3D 体系结构...

    手把手教你架构3D游戏引擎

    该书内容涵盖3D图形学基础、固定流水线技术、游戏引擎架构设计等多个关键领域。 首先,3D图形学是游戏引擎的基础,书中会讲解基本的几何概念,如向量、矩阵、变换和光照等。向量用于表示3D空间中的位置和方向,矩阵...

    Direct3D技术内幕

    2. **3D图形管线**:详细解析3D图形的流水线工作流程,包括顶点处理、几何变换、裁剪、投影、屏幕空间光栅化以及像素处理等阶段。 3. **顶点缓冲和索引缓冲**:介绍如何使用顶点数据构建3D模型,以及如何通过索引...

    3D数学基础图形与游戏开发

    这门学科不仅涉及几何学、线性代数,还包括向量代数、矩阵运算、坐标变换、投影与视图、光照模型等多个方面。以下是这些知识点的详细阐述: 1. **向量与标量**:在3D空间中,向量表示具有大小和方向的量,如速度或...

    DirectX 9.0 3D游戏开发编程基础(英文版)及配套代码

    4. **图形管线**:Direct3D采用一种流水线式的处理方式,从顶点数据到最终屏幕上显示的像素。图形管线包括顶点处理阶段(顶点着色器)、几何处理阶段(几何着色器)和像素处理阶段(像素着色器),每个阶段都可以...

    几何处理课程的注册作业_C++_C_下载.zip

    5. **图形流水线**:理解图形渲染流水线,从顶点数据到屏幕像素的过程,包括顶点处理、几何处理、光栅化和像素处理等阶段。 6. **几何变换**:C++和C语言可以实现各种几何变换函数,如旋转、平移、投影,这些变换常...

    Introduction to 3D Game Programming with DirectX 10(英文版).pdf

    2. **图形管线**:Direct3D中的流水线模型,从顶点数据到屏幕像素的过程。 3. **渲染技术**:包括深度缓冲、背面剔除、纹理映射、光照模型等。 4. **Shader编程**:编写着色器代码,定义物体表面的视觉效果。 5. **...

Global site tag (gtag.js) - Google Analytics