三维图形变换3D Transformation
- 格式:ppt
- 大小:7.83 MB
- 文档页数:115
西南科技大学毕业设计(论文)题目名称:基于Directx的三维图形立体变换的实现年级:2003级■本科□专科学生学号:20035247学生姓名:宋彦宾指导教师:蒋体钢学生单位:信息工程学院技术职称:副研究员学生专业:通信专业教师单位:信息工程学院西南科技大学教务处制基于Directx的三维图形立体变换的实现摘要:目前在世界上三维图形大量的被应用到日常生活中,它是许多媒体应用程序和游戏的主体部分,所以掌握最新的三维技术是很有必要的。
本文首先研究了利用C#和Directx9编程以及立体几何技术,数学变换和几何图形技术来制作三维立体图形的方法,掌握了利用API接口创建窗口实现消息传递以及对坐标系,缓存,矩阵坐标变换的知识。
其次,利用3DS Max创建三维立体图形,加载到所编写的三位图形立体变换程序中,并进行调试。
设计主要完成了对绘制出来的电视机的平移,旋转和缩放技术的处理,最后通过程序对图形进行渲染使其更具有可观性。
关键词:API;Visual C#.Net;Direct3D;3DS MaxThe Realization of Three-Dimensional Graph Three-Dimensional Transformation Based on DirectxAbstract:In the world of nowadays, the three -dimensional graphics are applying to daily life in a large number. It is the main part of the game and applications of many media. So, it's necessary to master the latest 3-D technology.Firstly, this thesis researches on using C # and the Directx9 programming as well as the three-dimensional geometric technology, the mathematical manipulation and the geometric figure technology to manufacture the three-dimensional graphics. Mastering the use of the API interfaces to create a window that can realize message transmission. Acquainting the knowledge on the coordinate system, the texture and the matrix coordinate transformation. Secondly, the 3D models of the system were created by 3dsmax, then prepared to load the stereo 3D graphics transformation process, and debugging. The translation, the rotation and scaling of TV which have mapped out were completed in this design. Finally, by embroidering in procedure, the graphics were more arresting.Key words:API, Visual C#.Net, Direct3D, 3DS Max目录第1章绪论 (1)1.1 三维技术的现状 (1)1.2 编程语言简介 (2)1.3 三维图形立体变换的设计分析 (2)1.3.1 设计需求分析 (2)1.3.2 设计性能要求 (2)第2章DirectX9.0技术 (3)2.1 DirectX9.0的概念 (3)2.1.1 Direct3D的构架 (3)2.1.2 设计规划 (4)2.2 DirectX 9.0函数简介 (5)2.2.1 窗口类的处理 (6)2.2.2 创建IDirect3D接口 (7)2.2.3 创建IDirect3DDevice界面 (8)2.2.4 开始渲染 (9)2.2.5 顶点属性与顶点格式 (10)2.2.6 顶点缓冲 (10)2.2.7 索引缓冲 (12)2.2.8 D3D中的图元简介 (13)2.2.9 向量 (14)2.2.10 矩阵的操作 (15)第3章主体程序的设计与实现 (19)3.1 三维图形立体变换的设计 (19)3.2 三维图形立体变换设计具体实现 (19)3.2.1 利用.X文件图像获取 (19)3.2.2 利用画点画线函数生成图像 (23)3.2.3 图像的缩放 (33)3.2.4 图像的旋转 (34)3.2.5 图像保存为.TXT文挡 (37)3.2.6 渲染功能实现 (38)3.2.7 光源和观察矩阵的实现 (39)3.2.8 键盘的控制 (39)3.3 程序运行的调试 (40)总结 (41)4.1 设计开发小结 (41)4.2 项目改进方向和未来展望 (41)致谢 (42)参考文献 (43)附录 (44)第1章绪论1.1 三维技术的现状在计算机屏幕上绘图的最基本单位是点,点构成线,线又构成多边形,还可以朝空间发展,构成立体图行,如正方体、立方体、锥体、球等。
深⼊理解CSS变形transform(3d)前⾯的话 本⽂将详细介绍关于transform变形3D的内容,但需以了解为基础。
3D变形涉及的属性主要是transform-origin、transform、transform-style、perspective、perspective-origin、backface-visibility坐标轴 在了解透视之前,⾸先要先了解坐标轴。
3D变形与2D变形最⼤的不同就在于其参考的坐标轴不同。
2D变形的坐标轴是平⾯的,只存在x轴和y轴,⽽3D变形的坐标轴则是x、y、z三条轴组成的⽴体空间,x轴正向、y轴正向、z轴正向分别朝向右、下和屏幕外透视 透视是transform变形3D中最重要的内容。
如果不设置透视,元素的3D变形效果将⽆法实现。
//下⾯以rotateX()旋转函数为例,rotateX(45deg)表⽰元素以X轴⽅向为轴沿顺时针旋转45⾓度//左图是⽆变形和透视样式的原始效果,中图是设置变形和透视样式的效果,右图是设置变形但未设置透视样式的效果 由以上三个图可说明,如果不设置透视,那么浏览器会将元素的3D变形操作投射垂直到2D视平⾯上,最终呈现出来的只是元素的宽⾼变化 要深⼊了解透视,需要了解观察者、被透视元素和变形元素这⼏个概念。
⾸先是变形元素,顾名思义,就是进⾏transform3D变形的元素,主要进⾏transform、transform-origin、backface-visibility等属性的设置 观察者是浏览器模拟出来的⽤来观察被透视元素的⼀个没有尺⼨的点,观察者发出视线,类似于⼀个点光源发出光线 被透视元素也就是被观察者观察的元素,根据属性设置的不同,它有可能是变形元素本⾝,也可能是它的⽗级或祖先元素(后⾯会详细介绍),主要进⾏perspective、perspective-origin等属性的设置透视距离 透视距离perspective是指观察者沿着平⾏于z轴的视线与屏幕之间的距离,简称视距perspective 值: none | <length> 初始值: none 应⽤于: ⾮inline元素(包括block、inline-block、table、table-cell等) 继承性: ⽆ [注意]透视perspective不可为0和负数,因为观察者与屏幕距离为0时或者在屏幕背⾯时是不可以观察到被透视元素的正⾯的 [注意]透视perspective不可取百分⽐,因为百分⽐需要相对的元素,但z轴并没有可相对的元素尺⼨【1】⼀般地,物体离得越远,显得越⼩。
实验三 3D图形变换一.实验目的:掌握3D图像的变换,了解多数的3D变换,平移,旋转等几何变换,还有投影变换等知识。
二.实验原理:3D图像的移动,比例变化,旋转等几何变换算法原理及各种投影变换算法原理。
三.实验步骤:一.建立MFC单文档程序,用来编写3D变换。
二.建立Mainframe,并设计,添加相应的ID及映射函数。
三.实验的主要代码:1、设计3维图形平移变换算法的实现程序;void CMyView::OnTranslation(){m_Select=SEL_TS;m_str="平移";CBaseClass my1; //构造新的CBaseClass对象int i,j;for ( i=1;i<=4;++i){for ( j=1;j<=4;++j)my1.A[i][j]=0;}my1.A[1][1]=1;my1.A[2][2]=1;my1.A[4][4]=1;my1.A[3][3]=1;my1.A[4][1]=20; //x轴方向上平移my1.A[4][2]=28; //y轴方向上平移my1.A[4][3]=28; //z轴方向上平移my1.Draw();}2、设计3维图形缩放变换算法的实现程序;void CMyView::OnScalingS(){m_Select=SEL_MO;m_str="整体变比";CBaseClass my1; //构造新的CBaseClass对象int i,j;for ( i=1;i<=4;++i){for ( j=1;j<=4;++j)my1.A[i][j]=0;}my1.A[1][1]=1;my1.A[2][2]=1;my1.A[3][3]=1;my1.A[4][4]=0.5;my1.Draw();}void CMyView::OnScalingXyz(){m_Select=SEL_MO;m_str="XYZ变比";CBaseClass my1; //构造新的CBaseClass对象int i,j;for ( i=1;i<=4;++i){for ( j=1;j<=4;++j)my1.A[i][j]=0;}my1.A[1][1]=2; //x轴方向上比例my1.A[2][2]=1; //y轴方向上比例my1.A[3][3]=2; //z轴方向上比例my1.A[4][4]=1;my1.Draw();}3、设计3维图形旋转变换算法的实现程序。
View MorphingStephen M.Seitz Charles R.Dyer算法设计小组翻译摘要(abstract)图像变形(Image morphing)技术可以在图像之间产生引人入胜的2D转变(transition)。
然而,物体姿势(pose)和观察者视点(viewpoint)的不同常常导致图像变形(image morphing)中很难被人工校正的不自然的扭曲。
这篇论文运用射影几何学的基本定律,介绍了在图像变形(Image morphing)方面的一些简单的拓展(extension)。
它能正确的解决3D射影照相机(3D projective camera)和场景变换(scene transformation)方面的一些问题。
这一被称为视觉变形(view morphing)的技术是这样工作的:首先对两张图片进行预处理(prewarping),然后计算出一个变形(morph),最后对插入的图片进行再处理(postwarping the interpolated images)。
由于不需要任何3D图形方面的知识,这项技术可能被应用于摄影、绘画和渲染的场景(rendered scenes)等方面。
这项技术综合了视角方面和图像结构方面的不同,还提供了大量的只需运用简单的图像变换(Image transformation)就可以做出的有趣3D效果。
附加关键词:变形morphing 图像变形image metamorphosis 视觉插值view interpolation 视觉合成view synthesis 图像扭曲image warping1简介(introduction)最近,为创造图像间平滑转变的变形技术(morphing technique)已经吸引许多人的兴趣。
这些技术结合图形和颜色上的2D插值(interpolation)来创造戏剧性的特殊效果。
变形(morphing)之所以这么吸引人是因为它产生的图像看上去惊人的生动,在视觉上十分令人信服。
基于仿射变换的三维到二维转换算法刘婧【摘要】Three-dimensional affine transformation formula and affine array fomula in three-dimensional coordi-nate system, giving a simple coordinate transformation formula are deduced and its algorithm is proved by QT class libraries based on C++ which could be applied to graphic adapter that imitates three dimension by two dimension, such as three-dimensional transformation imitation in flash and three-dimensional graphic transformation in GUI pro-gramming.%根据二维仿射变换公式推导了三维仿射变换公式,给出了三维坐标系中的仿射矩阵表示公式.同时提出了一种简单的三维到二维的坐标转换公式,并且使用基于C++的QT类库对这种算法进行了实现.这种算法可以应用于一些使用二维模拟三维的图形处理软件中,比如flash中的三维变换模拟和GUI编程中的三维图形变换等情况下.【期刊名称】《科学技术与工程》【年(卷),期】2011(011)027【总页数】4页(P6743-6746)【关键词】仿射变换;三维;C++;QT【作者】刘婧【作者单位】渭南师范学院,渭南714000【正文语种】中文【中图分类】TP391.75进行一些三维图形处理要用到三维图形的旋转、平移、拉伸等变换。
同时计算机屏幕又是一个二维的平面,如何简单地将三维图形表示在二维平面上。
3.1.2 三维图形几何变换三维几何变换包括平移、旋转和变比。
三维几何变换可以表示为公式,或三维齐次坐标和4×4变换矩阵的乘积。
下面分别以公式,矩阵乘积和简记符号来描述三维几何变换。
并记变换前物体的坐标为x,y,z;变换后物体的坐标为x′,y′,z′。
一、平移设Tx,Ty,Tz是物体在三个坐标方向上的移动量,则有公式:x′=x+T xy′=y+T yz′=z+T z矩阵运算表达为:[x′ y′ z′ 1]=[x y z 1]简记为:T(Tx,Ty,Tz)二、旋转旋转分为三种基本旋转:绕z轴旋转,绕x轴旋转,绕y轴旋转。
在下述旋转变换公式中,设旋转的参考点在所绕的轴上,绕轴转θ角,方向是从轴所指处往原点看的逆时针方向(图3.5(a),(b))。
1 绕z轴旋转的公式为:x′=xcosθ-ysinθy′=xsinθ+ycosθz′=z矩阵运算的表达为:[x′ y′ z 1]=[x y z 1]简记为R z(θ)。
2 绕x轴旋转的公式为:x′=xy′=ycosθ-zsinθz′=ysinθ+zcosθ矩阵运算的表达为:[x′ y′ z′ 1]=[x y z 1]简记为R x(θ)2 绕y轴旋转的公式为:x′=zsinθ+xcosθy′=yz′=zcosθ-xsinθ矩阵的运算表达式为:[x′ y′ z′ 1]=[x y z 1]简记为Ry(θ)。
如果旋转所绕的轴不是坐标轴,而是一根任意轴,则变换过程变显得较复杂。
首先,对物体作平移和绕轴旋转变换,使得所绕之轴与某一根标准坐标轴重合。
然后,绕该标准坐标轴作所需角度的旋转。
最后,通过逆变换使所绕之轴恢复到原来位置。
这个过程须由7个基本变换的级联才能完成。
设旋转所绕的任意轴为p1, p2两点所定义的矢量。
旋转角度为 (图3.6)。
这7个基本变换是:1 T(-x1,-y1,-z1)使p1点与原点重合(图3.6(b));2 R x(α),使得轴p1p2落入平面xoz内(图3.6(c));3 R y(β),使p1p2与z轴重合(图3.6(d));4 R z(θ),执行绕p1p2轴的θ角度旋转(图3.6(e));5 R y(-β),作3的逆变换;6 R x(-α),作2的逆变换;7 T(x1,y1,z1)作1的逆变换。
第六章 三维图形变换第一节 三维图形变换基础一、三维坐标系xyzxyz右手坐标系左手坐标系三维图形学中习惯上通常是采用右手坐标系。
xy 平面对应于视平面,z 轴垂直于视平面,指向视平面之外。
二、三维齐次坐标及变换矩阵三维图形变换也是基于矩阵运算进行。
矩阵运算的维数被扩展为四维。
三维坐标点采用4元齐次坐标表示:(x , y , z , 1),三维坐标与三维齐次坐标的相互转换如下:三维坐标(x , y ,z )——齐次坐标(x , y ,z , 1) 齐次坐标(x , y ,z , h )——二维坐标(x /h , y /h ,z /h ) 变换矩阵则为4X4的矩阵:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡s nm kr j i h q f e d p c b a 其中:平移变换第二节 三维几何变换一、三维基本变换 1. 平移变换⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=1010000100001nmk T )1,,,()1,,,(n z m y k x T z y x +++=⋅2. 比例变换)1,,,()1,,,(1000000000000jz ey ax T z y x j e a T =⋅⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡= 3. 旋转变换三维的基本旋转变换分为三种,即绕三个坐标轴的旋转变换。
(1)绕z 轴旋转γ角旋转后z 值不变,x,y 值将发生改变,x,y 值的计算公式与平面旋转相同,即:zz y x y y x x ='+='-='γγγγcos sin sin cos 则变换矩阵为:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=1000010000cos sin 00sin cos γγγγT 有:)1,1,cos sin ,sin cos ()1,,,(γγγγy x y x z y x +-=T(2)绕x 轴旋转α角则旋转后x 的坐标值不变,y 和z 的坐标值将改变,相当于在yz 平面上绕平面原点进行旋转变换。
平面转转变换的公式为:ααααcos sin sin cos y x y y x x +='-='对应而来,这里y 对应于x ,z 对应y ,有:ααααcos sin sin cos z y z z y y +='-='则变换矩阵为:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=10000cos sin 00sin cos 00001ααααT )1,cos sin ,sin cos ,()1,,,(ααααz y z y x z y x +-=T(3)绕y 轴旋转β角这时,z 对应于x ,x 对应于y 。
图形学名词解释3D三维(three dimension)。
客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐标系列表示物体。
3D modeling 3D建模。
用三维坐标来描述物体的形状。
在各种计算机图形应用领域中有不同的三维建模方法,用不同的算法来描述这些领域中的物体和对象。
3D transformation 3D变换。
在三维空间中把物体的三维坐标从一个位置变换至另一位置,或者从一个坐标系变换至另一坐标系。
这是一种对物体的三维坐标(x,y,z)进行数据操作的一种形式。
3D transformation sequence 3D变换序列。
把客观世界中的物体在计算机屏幕上显示,通常需要进行一系列坐标变换,如从物体的相对坐标系变换至计算机屏幕需要经过平移、旋转、视点投影变换等一系列坐标变换。
4D四维(four dimension)。
在计算机图形学中描述客观世界除了用三维坐标来描述物体的形状外,还用时间t作为第四维来描述过程,通常用(x,y,z,t)表示。
6D六维(six dimension)。
在计算机图形学三维应用过程中(例如:模拟仿真、虚拟现实应用等)用六个自由度(x,y,z坐标、偏角、倾角、仰角)来描述物体的运动。
a stream一段流AABB沿坐标轴的包围盒(axis-aligned bounding boxes)ABI二进制接口Absorption吸收Accumulation Buffer累积缓存。
累积缓存同颜色缓存一样也保存颜色数据,但它只保存RGBA颜色数据,而不能保存颜色索引数据(因为在颜色表方式下使用累积缓存其结果不确定)。
这个缓存一般用于累积一系列图像,从而形成最后的合成图像。
利用这种方法,可以进行场景反走样操作。
action mapping动作映射algorithm算法。
一般指在用电脑软件解决问题时所用的数学方法或程序实现过程。
通常用数学公式或程序框图来描述。
3D数学基本常识三维坐标系(3D Coordinate System)三维坐标是把二维的平面坐标推广到三维空间中,在三维坐标中,点(x,y,z)的齐次坐标为(nx,ny,nz,n),其中n为任意不为0的数,规范化的齐次坐标为(x,y,z,1),与之相对应,三维变换的变换矩阵为4×4矩阵。
在三维空间中,我们通常使用右手坐标系(Right-Handed Coordinate System),因为它符合数学上的习惯,而在计算机图形学中,我们会使用左手坐标系(Left-Handed Coordinate System),因为它比较符合日常习惯。
其实,我们可以任意的旋转这些坐标系,而图形仍然保持不变。
常见的坐标系如下:屏幕坐标系:相对于显示器的原点的2D坐标系本地坐标系:相对于对象的原点的3D坐标系世界坐标系:相对于3D世界的原点三维坐标系对齐(视点)坐标系:世界坐标系的变换,观察者的位置在世界坐标系的原点。
点(Point)点是在某一个坐标系中使用坐标值指定的位置。
因此,点到坐标原点之间的距离与坐标系的选择有关。
点P在坐标系A中的坐标为(0,0,0),而在坐标系B中的坐标则为(x,y,z)。
向量(Vector)向量是指两点的差值,具有大小和方向,即给定两点,就能唯一确定一个向量,向量的大小和方向与坐标系的选择无关。
向量V=(Vx,Vy,Vz)=P1P2=(x2-x1,y2-y1,z2-z1)其中,Vx,Vy和Vz分别为向量V在x,y和z轴上的投影,称为向量V的x分量(x component),y分量(y component)和z分量(z component)。
该向量的大小为:向量V与x,y和z轴形成的方向角(Direction Angle):α,β和γ,其中cosα,cosβ和cosγ称为方向余弦(DirectionCosine)。
向量加法:V1+V2=(V1x+V2x,V1y+V2y,V1z+V2z)向量标量乘:aA=(aVx,aVy,aVz)向量标量积:V1·V2= V1x+V2x,V1y+V2y,V1z+V2z向量积(叉积):V1×V2=(V1yV2z-V1zV1y,V1zV2x-V1xV2z,V1xV2y-V1yV2z)=Ux Uy UzV1x V1y V1zV2x V2y V2z注:其中Ux,Uy,Uz分别表示沿x轴,y轴和z轴的单位向量。