现代设计方法三维图形的几何变换分解
- 格式:ppt
- 大小:888.50 KB
- 文档页数:37
立体几何变换学习平移旋转和放缩等立体几何变换方法立体几何变换学习平移、旋转和放缩等立体几何变换方法立体几何变换是一种在三维空间中改变物体位置、方向、形状和大小等属性的方法。
其中,平移、旋转和放缩是最基础的立体几何变换方法。
本文将介绍这三种方法的原理和应用。
一、平移平移是将一个物体在空间中移动到不同的位置,保持其大小和形状不变。
在二维几何中,平移是沿着平行于坐标轴的直线将物体移动到新的位置。
在三维几何中,我们可以通过向量表示物体的平移变换。
在三维空间中,设物体初始位置为P(x,y,z),平移向量为T(a,b,c),则物体移动到新位置P'(x',y',z')后,有以下关系:x' = x + ay' = y + bz' = z + c平移变换可以用于物体的移动和场景的布局。
在计算机图形学中,平移变换通常用于物体的位移,以及相机在场景中的位置变换。
二、旋转旋转是围绕某个中心点将物体按照特定角度进行旋转。
在二维几何中,我们可以通过角度表示旋转的大小,并通过中心点进行旋转变换。
在三维几何中,我们使用旋转矩阵来表示旋转变换。
对于一个物体P(x,y,z)在三维空间中的旋转:x' = x*cosθ - y*sinθy' = x*sinθ + y*cosθz' = z其中,θ表示旋转角度。
旋转矩阵可以通过矩阵乘法的方式来计算,将初始点P(x,y,z)与旋转矩阵相乘,得到旋转后的点P'(x',y',z')。
旋转变换可以用于物体的姿态调整、动画效果的制作等方面。
在计算机图形学中,旋转变换是非常常用的一种变换方法。
三、放缩放缩是通过改变物体的尺寸来进行变换。
在二维几何中,我们通常使用一个比例因子来表示放缩的大小。
在三维几何中,我们可以通过三个比例因子来表示物体在不同维度上的放缩。
对于一个物体P(x,y,z)在三维空间中的放缩变换:x' = kxy' = kyz' = kz其中,k表示放缩因子,可以是正数、负数或零。
在3D图形建模时,开发者最经常问的问题是,为什么一个三维空间,由顶点数据构成的模型,最后会映射在屏幕上显示。
实际上,三维数据变换处理经过以下三步骤,模型-视图变换(Model-View)-》透视(Projection)-》视口变换(ViewPort)。
本文从尽量简单的角度,介绍一下3D模型的显示原理 【编著】局部坐标->世界坐标->相机坐标->视口坐标->屏幕坐标了解齐次坐标系由向量导出齐次坐标系:首先,在三维空间的坐标系中,向量是很重要的概念,为什么需要向量?因为我们不但需要知道空间中一个点的位置,有时还需要标明方向,比如人眼的视角,物体的运动等。
我们复习一下:物理定义:向量是具有如下两条性质的量• 方向• 长度: |v|在了解了向量之后,需要解决向量如何在坐标系中表示在n维空间中,任意n个线性无关的向量构成空间的基,给定空间的一组基v1, v2 ,…, vn,空间中任意向量v都可以表示为v = α1v1+ α2v2 +…+ αnvn,其中{αi}是唯一的也就是说给定一组基(3D世界里,基就是世界坐标系或某一视角坐标系),那么该标量组{α1, α2 , …, αn}就可以表示其中的任意向量与基的关系,就解决了向量如何在坐标系中数学表示的基础。
即:但是这样是不足以表示点的,那么可以在基向量组中增加一个点(称为原点),从而构成一个frameFrame是由(O, v1, v2 ,…, vn)确定的,在这个Frame中,每个向量可以表示为v = α1v1+ α2v2 +…+ αnvn每个点可以表示为P = O + β1v1+ β2v2 +…+ βnvn从而得到n+1维齐次坐标表示,即引入了齐次坐标系向量:v = [α1, α2 ,…,αn, 0]T点:P = [β1, β2 ,…, βn, 1]T齐次坐标系:齐次坐标是所有计算机图形系统的关键,可以大大简化计算 • 所有标准变换(旋转、平移、放缩)都可以应用4×4阶矩阵的乘法实现• 硬件流水线体系都设计为四维计算• 对于正交投影,可以通过w = 0保证向量,w = 1保证点• 对于透视投影,可以进行特殊的处理:透视除法模型-视图变换(Model-View)-》透视(Projection)-》视口变换(ViewPort)有了齐次坐标系,就可以讨论到底如何将模型数据最终投影到平面上并显示出来,首先看一下模型的格式,每个模型有许多组三角型顶点组成,每组顶点数据包含:x,y,z,(vertex,顶点),x,y,z(normal,法向量,表示该顶点所在平面的方向,比如说,光照向量夹角和法向量就可以决定入射光强度), s,t(纹理坐标),顶点顺序(index,即描述每个三角型的顶点描画顺序)这些数据将经过以下步骤进行处理将顶点数据转换为齐次坐标系下的坐标:P = [X, Y, Z]T -》 P = [X, Y, Z, 1]T w=1然后进行Model-View变换(把模型摆放到人眼观察的位置,常见的有平移,旋转和缩放),和透视(投影到二维平面上),再通过计算纹理坐标st在对应纹理上的颜色值,对显示屏幕进行适配(ViewPort),就可以显示三维模型到屏幕上(为了说明过程,这里简化了很多流程)。
1 实验目的1)掌握4*4矩阵乘法运算的编程实现。
2)掌握平移、比例、旋转三种基本三维几何变换矩阵生成。
3)掌握正交投影图的生成和绘制方法。
2 实验要求1)三维坐标系的原点位于屏幕中心,X轴水平向右,Y轴垂直向上,Z轴垂直于坐标屏幕,指向屏幕外。
2)设计实现三维图形变换类,具有平移、比例、旋转三维几何变换功能,以及正交投影变换功能.3)使用第二章的直线类绘制正四面体的是三维线框模型,要求体心位于坐标原点,使正四面体同时绕Y轴匀速旋转,并相对于体心点来回缩放。
4)使用双缓冲机制,绘制正四面体三维线框模型的二维正交投影图,要求投影到XOY平面。
3 详细设计3。
1 核心算法及类型设计void CTrans3DView::BuildPointEdge(){double d=400;P[0]。
x=d/2; P[0].y=d/2; P[0].z=d/2;P[1]。
x=d/2; P[1]。
y=-d/2; P[1].z=-d/2;P[2]。
x=—d/2; P[2]。
y=—d/2; P[2]。
z=d/2;P[3].x=-d/2; P[3].y=d/2; P[3]。
z=—d/2;E[0]。
SetPointsIndex(0,1);E[1].SetPointsIndex(0,2);E[2]。
SetPointsIndex(0,3);E[3]。
SetPointsIndex(1,2);E[4]。
SetPointsIndex(1,3);E[5].SetPointsIndex(2,3);}void CTrans3DView::OnDraw(CDC*pDC){CTrans3DDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;// TODO:在此处为本机数据添加绘制代码CRect rect;GetClientRect(&rect);pDC-〉SetMapMode(MM_ANISOTROPIC);pDC-〉SetWindowExt(rect.Width(),rect.Height());pDC—>SetViewportExt(rect.Width(),—rect.Height());pDC—〉SetViewportOrg(rect.Width()/2,rect。