OpenGL坐标系讲解

上传人:仙*** 文档编号:84627603 上传时间:2022-05-04 格式:DOC 页数:15 大小:469.50KB
返回 下载 相关 举报
OpenGL坐标系讲解_第1页
第1页 / 共15页
OpenGL坐标系讲解_第2页
第2页 / 共15页
OpenGL坐标系讲解_第3页
第3页 / 共15页
点击查看更多>>
资源描述
第一篇基于VC+勺OpenGl编程讲座之坐标变换 2005 年 09 月 19 日 11:32 天极 yesky文/刘涛Ope nGL通过相机模拟、可以实现计算机图形学中最基本的三维变换,即几何变换、投影 变换、裁剪变换、视口变换等,同时,Ope nGL还实现了矩阵堆栈等。理解掌握了有关坐标变换的内容,就算真正走进了精彩地三维世界。一、OpenGL中的三维物体的显示(一)坐标系统在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的 图形,将三维物体及二维数据联系在一起的唯一纽带就是坐标。为了使被显示的三维物体数字化,要在被显示的物体所在的空间中定义一个坐标系。这 个坐标系的长度单位和坐标轴的方向要适合对被显示物体的描述,这个坐标系称为世界坐标 系。世界坐标系是始终固定不变的。Ope nGL还定义了局部坐标系的概念,所谓局部坐标系,也就是坐标系以物体的中心为坐标原点,物体的旋转或平移等操作都是围绕局部坐标系进行的,这时,当物体模型进行旋转 或平移等操作时,局部坐标系也执行相应的旋转或平移操作。需要注意的是,如果对物体模 型进行缩放操作,则局部坐标系也要进行相应的缩放,如果缩放比例在案各坐标轴上不同, 那么再经过旋转操作后,局部坐标轴之间可能不再相互垂直。无论是在世界坐标系中进行转 换还是在局部坐标系中进行转换,程序代码是相同的,只是不同的坐标系考虑的转换方式不 同罢了。计算机对数字化的显示物体作了加工处理后,要在图形显示器上显示,这就要在图形显 示器屏幕上定义一个二维直角坐标系,这个坐标系称为屏幕坐标系。这个坐标系坐标轴的方 向通常取成平行于屏幕的边缘,坐标原点取在左下角,长度单位常取成一个象素。(二) 三维物体的相机模拟为了说明在三维物体到二维图象之间,需要经过什么样的变换,我们引入了相机(Camera)模拟的方式,假定用相机来拍摄这个世界,那么在相机的取景器中,就存在人眼和现实世界 之间的一个变换过程。* Ccxnp_ifa*f&為?折pa吕A H ti 口叮怕ui田 飞| 肩妙。aorbflBQI 和” if1 he E in mf图一、相机模拟OpenG冲的各种坐标变换从三维物体到二维图象,就如同用相机拍照一样,通常都要经历以下几个步骤:1将相机置于三角架上,让它对准三维景物,它相当于Ope nG冲调整视点的位置,即视点变换( Viewing Transformation)。2、将三维物体放在场景中的适当位置,它相当于OpenGL中的模型变换(ModelingTransformation ),即对模型进行旋转、平移和缩放。3、 选择相机镜头并调焦,使三维物体投影在二维胶片上,它相当于Ope nGL中把三维模型投影到二维屏幕上的过程,即OpenGL的投影变换(Projection Transformation ),OpenGL中投影的方法有两种,即正射投影和透视投影。为了使显示的物体能以合适的位置、大小和方向显示出来,必须要通过投影。有时为了突出图形的一部分,只把图形的某一部分显示出 来,这时可以定义一个三维视景体(Viewing Volume)。正射投影时一般是一个长方体的视景体,透视投影时一般是一个棱台似的视景体。只有视景体内的物体能被投影在显示平面上, 其他部分则不能。4、 冲洗底片,决定二维相片的大小,它相当与OpenGL中的视口变换(Viewport Transformation )(在屏幕窗口内可以定义一个矩形,称为视口( Viewport),视景体投影后 的图形就在视口内显示)规定屏幕上显示场景的范围和尺寸。通过上面的几个步骤,一个三维空间里的物体就可以用相应的二维平面物体表示了,也 就能在二维的电脑屏幕上正确显示了。总的来说,三维物体的显示过程如下:图二、三维物体的显示过程二、OpenGL中的几种变换Ope nGL中的各种转换是通过矩阵运算实现的,具体的说,就是当发出一个转换命令时,该命令会生成一个 4X4阶的转换矩阵(OpenGL中的物体坐标一律采用齐次坐标,即(x, y,乙w),故所有变换矩阵都采用4X4矩阵),当前矩阵与这个转换矩阵相乘,从而生成新的当前矩阵。例如,对于顶点坐标v,转换命令通常在顶点坐标命令之前发出,若当前矩阵为C,转换命令构成的矩阵为 M则发出转换命令后, 生成的新的当前矩阵为 CM这个矩阵再乘以 顶点坐标v,从而构成新的顶点坐标 CMv上述过程说明,程序中绘制顶点前的最后一个变 换命令最先作用于顶点之上。这同时也说明,Ope nGL编程中,实际的变换顺序与指定的顺序是相反的。(一)视点变换视点变换确定了场景中物体的视点位置和方向,就向上边提到的,它象是在场景中放置了一架照相机,让相机对准要拍摄的物体。确省时,相机(即视点)定位在坐标系的原点 (相机初始方向都指向 Z负轴),它同物体模型的缺省位置是一致的,显然,如果不进行视点变换,相机和物体是重叠在一起的。执行视点变换的命令和执行模型转换的命令是相同的,想一想,在用相机拍摄物体时,我们可以保持物体的位置不动,而将相机移离物体,这就相当于视点变换;另外,我们也可以保持相机的固定位置,将物体移离相机,这就相当于模型转换。这样,在Ope nGL中,以逆时针旋转物体就相当于以顺时针旋转相机。因此,我们必须把视点转换和模型转换结合在一起考虑,而对这两种转换单独进行考虑是毫无意义的。除了用模型转换命令执行视点转换之外,Ope nGL实用库还提供了 gluLookAt()函数,该函数有三个变量,分别定义了视点的位置、 相机瞄准方向的参考点以及相机的向上方向。该函数的原型为:void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble upx,GLdouble upy,GLdouble upz);该函数定义了视点矩阵,并用该矩阵乘以当前矩阵。eyex,eyey,eyez定义了视点的位置;centerx、centery和centerz变量指定了参考点的位置,该点通常为相机所瞄准的场 景中心轴线上的点;upx、upy、upz变量指定了向上向量的方向。通常,视点转换操作在模型转换操作之前发出,以便模型转换先对物体发生作用。 场景中物体的顶点经过模型转换之后移动到所希望的位置,然后再对场景进行视点定位等操作。 模型转换和视点转换共同构成模型视景矩阵。(二)模型变换模型变换是在世界坐标系中进行的。缺省时,物体模型的中心定位在坐标系的中心处。Ope nGL在这个坐标系中,有三个命令,可以模型变换。1、模型平移glTranslatefd(TYPE x,TYPE y,TYPE z);该函数用指定的x,y,z值沿着x轴、y轴、z轴平移物体(或按照相同的量值移动局部 坐标系)。2、模型旋转glRotatefd(TYPE angle,TYPE x,TYPE,y,TYPE z);该函数中第一个变量angle制定模型旋转的角度,单位为度,后三个变量表示以原点(0,0,0 )到点(x,y,z)的连线为轴线逆时针旋转物体。例如,glRotatef(45.0,0.0,0.0,1.0)的结果是绕z轴旋转45度。3、模型缩放glScalefd(TYPE x,TYPE y,TYPE z);该函数可以对物体沿着 x,y,z轴分别进行放大缩小。函数中的三个参数分别是x、y、z轴方向的比例变换因子。缺省时都为1.0,即物体没变化。程序中物体 Y轴比例为2.0,其余都为1.0,就是说将立方体变成长方体。(三) 投影变换经过模型视景的转换后,场景中的物体放在了所希望的位置上,但由于显示器只能用二维图象显示三维物体,因此就要靠投影来降低维数(投影变换类似于选择相机的镜头)。事实上,投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终进入图像的只是视景体内的有关部分。投影包括透视投影(Perspective Projection )和正视投影(Orthographic Projection)两种。透视投影,符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被进行切割过的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。Ope nGL透视投影函数有两个,其中函数glFrustum()的原型为:void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);它创建一个透视视景体。其操作是创建一个透视投影矩阵,并且用这个矩阵乘以当前矩阵。这个函数的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left ,bottom,-near )和(right ,top,-near );最后一个参数far是远裁剪平面的Z负值,其 左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。near和far表示离视点的远近,它们总为正值。该函数形成的视景体如图三所示。图三、透视投影视景体另一个透视函数是:void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar);它也创建一个对称透视视景体,但它的参数定义于前面的不同,参数fovy定义视野在X-Z平面的角度,范围是0.0, 180.0;参数aspect是投影平面宽度与高度的比率;参数 zNear和Far分别是远近裁剪面沿 Z负轴到视点的距离,它们总为正值。近平页距翦远平面距离图四、透视投影视景体以上两个函数缺省时,视点都在原点,视线沿Z轴指向负方向。正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道, 也就是一个长方 体,如图五所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。Ope nGL正射投影函数也有两个,一个函数是:void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top, GLdouble它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left ,bottom,-near ),右上角点是(right ,top,-near );远裁剪平面也是一个矩形,左下角 点空间坐标是(left , bottom,-far ),右上角点是(right ,top,-far )。所有的near 和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行于Z轴,且视点朝向Z负轴。这意味着物体在视点前面时far和near都为负值,物体在视点后面时far和near都为正值。另一个函数是:void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)它是一个特殊的正射投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省值分别为-1.0和1.0,所有二维物体的 Z坐标都为0.0。因此它的裁剪面是一个左 下角点为(left , bottom )、右上角点为(right ,top )的矩形。(四)视口变换。视口变换就是将视景体内投影的物体显示在二维的视口平面上。运用相机模拟方式, 我们很容易理解视口变换就是类似于照片的放大与缩小。在计算机图形学中, 它的定义是将经过几何变换、投影变换和裁剪变换后的物体显示于屏幕窗口内指定的区域内,这个区域通常为矩形,称为视口。 Ope nGL中相关函数是:glViewport(GLint x,GLint y,GLsizei width, GLsizei height);这个函数定义一个视口。函数参数(x, y)是视口在屏幕窗口坐标系中的左下角点坐标,参数width和height分别是视口的宽度和高度。缺省时,参数值即(0, 0, winWidth,wi nH eight)指的是屏幕窗口的实际尺寸大小。所有这些值都是以象素为单位,全为整型数。(5)裁剪变换在OpenGL中,除了视景体定义的六个裁剪平面(上、下、左、右、前、后)外,用户还可自己再定义一个或多个附加裁剪平面,以去掉场景中无关的目标,如图六所示。图六、附加裁剪平面附加平面裁剪函数为:1、void glClipPlane(GLenum plane,Const GLdouble *equation);函数参数equation指向一个拥有四个系数值的数组,这四个系数分别是裁剪平面Ax+By+Cz+D=0的A、B、C、D值。因此,由这四个系数就能确定一个裁剪平面。参数plane是 GL_CLIP_PLANEi(i=0,1,.J,指定裁剪面号。在调用附加裁剪函数之前,必须先启动glEnable(GL_CLIP_PLANEi),使得当前所定义的裁剪平面有效;当不再调用某个附加裁剪平面时,可用glDisable(GL_CLIP_PLANEi)关闭相应的附加裁剪功能。下面这个例子不仅说明了附加裁剪函数的用法,而且调用了gluPerspective() 透视投影函数,读者可以细细体会其中的用法。例程如下:#include glos.h#include #include #include void myinit(void);void CALLBACK myReshape(GLsizei w, GLsizei h);void CALLBACK display(void);void CALLBACK display(void)GLdouble eqn4 = 1.0, 0.0, 0.0, 0.0;glClear(GL_COLOR_BUFFER_BIT);glColor3f (1.0, 0.0, 1.0);glPushMatrix();glTranslatef (0.0, 0.0, -5.0);/* clip the left part of wire_sphere : x0 */glClipPlane (GL_CLIP_PLANE0, eqn);glEnable (GL_CLIP_PLANE0);glRotatef (-90.0, 1.0, 0.0, 0.0);auxWireSphere(1.0);glPopMatrix();glFlush();void myinit (void)glShadeModel (GL_FLAT);void CALLBACK myReshape(GLsizei w, GLsizei h)glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW);void main(void)auxInitDisplayMode (AUX_SINGLE | AUX_RGB);auxInitPosition (0, 0, 500, 500);auxInitWindow (Arbitrary Clipping Planes);myinit ();auxReshapeFunc (myReshape);auxMainLoop(display);(六)矩阵栈的操作在讲述矩阵栈之前,首先介绍两个基本Ope nGL矩阵操作函数:1、void glLoadMatrixfd(const TYPE *m)设置当前矩阵中的元素值。函数参数*m是一个指向16个元素(m0, m1, ., m15) 的指针,这16个元素就是当前矩阵 M中的元素,其排列方式如下:M = | m0 m4 m8 m12 | m1 m5 m9 m13 | m2 m6 m10 m14 | m3 m7 m11 M15 |2、 void glMultMatrixfd(const TYPE *m)用当前矩阵去乘 *m 所指定的矩阵,并将结果存放于 *m 中。当前矩阵可以是用 glLoadMatrix() 指定的矩阵,也可以是其它矩阵变换函数的综合结果。Ope nGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。一般说来,矩阵堆栈常用于构造具有继承性的模型, 即由一些简单目标构成的复杂模型。 矩阵堆栈对复 杂模型运动过程中的多个变换操作之间的联系与独立十分有利。因为所有矩阵操作函数如 glLoadMatrix() 、glMultMatrix()、 gl LoadIde ntity()等只处理当前矩阵或堆栈顶部矩阵,这样堆栈中下面的其它矩阵就不受影响。堆栈操作函数有以下两个: void glPushMatrix(void);该函数表示将所有矩阵依次压入堆栈中, 顶部矩阵是第二个矩阵的备份; 压入的矩阵数 不能太多,否则出错。 void glPopMatrix(void);该函数表示弹出堆栈顶部的矩阵, 令原第二个矩阵成为顶部矩阵, 接受当前操作, 故原 顶部矩阵被破坏;当堆栈中仅存一个矩阵时,不能进行弹出操作,否则出错。坐标变换:OPENG的每一种变换都是一个矩阵的运算。假设当前某顶点坐标为C, 现在要做某种变换(设矩阵为M得到新的坐标C1,那么运算过程就是C1= TX Co OpenGL应用左乘规则,坐标的变换就是用变换矩阵乘以坐标向量OpenGL变换在编程的时候顺序是反过来的。想对目标glutWireSphere(0.2, 10,8);/draw earth 做R2,T,R1的变换,在写的时候就要:glRotatef(year, 0.0, 1.0,0.0);/旋转矩阵 R1glTranslatef(2.0, 0.0, 0.0);/平移矩阵 TglRotatef(day, 0.0, 1.0, 0.0);/旋转矩阵 R2glutWireSphere(0.2, 10, 8);/draw earth屏幕坐标点=3D模型点*几何变换栈矩阵(n.1)*投影变换栈矩阵(n.1)OpenGL维护两个栈:投影变换栈,几何变换栈。投影:glOrtho,gluPerspectiveglMatrixMOde(GL_PROJECTION);几何变换:glTranslatef,glRotatef,glScalef-glMatrixMOde(GL_MODELVIEW);openGL使用右手坐标从左到右,x递增从下到上,y递增从远到近,z递增OPENG坐标系可分为:世界坐标系和当前绘图坐标系。世界坐标系以屏幕中心为原点(0, 0, 0)。你面对屏幕,你的右边是x正轴,上 面是y正轴,屏幕指向你的为z正轴。长度单位这样来定: 窗口范围按此单位 恰好是(-1,-1)到(1,1)。当前绘图坐标系是绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘 图坐标系是重合的。当用glTranslatef() ,glScalef(),glRotatef()对当前绘图坐标系进行平移、伸缩、旋转变换之后, 世界坐标系和当前绘图坐标系不再 重合。改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图 坐标 系进行绘图,所有的函数参数也都是相对当前绘图 坐标系来讲的。第三篇1, OpenGL(OpenGraphics Library )是一个三维的计算机图形和模型算法库, 起源于SGI公司。OpenGL 官方网址: wwwope ngl.org2, Ope nGL 和操作系统平台无关,他支持 Win dows 95/98/NT/2K/XP, Li nux,Python, MacOS, Unix 等等。主流编程语言, 包括 c, c+, FORTRANAda, Java 都可以调用OpenGL库。在Windows系统上,OpenGL的效率一般要低于 Microsoft 的 Dirext 3D 。3, OpenGL坐标系分为世界坐标系和屏幕坐标系。OpenGL在输出到设备上时 通过矩阵变换将世界 坐标系转换到屏幕坐标系,这样,3D图形在二维设备上得 到显示。OpenGL的默认屏幕坐标在左下角,X轴向右,丫轴向上,Z轴从 屏幕向外。Ope nGL的世界坐标系采用右手原则: oMWs4-aelyFBrWvLg49q-0pkvUE nAXNtsgwlh98b2IFEIWBwtcBAhmUdB0saSmFg其中,箭头方向是旋转角度的正方向。4, Ope nGL投影分为正交投影和透视投影。正交投影即将3D模型平行的映射到平面上。函数:glOrtho(xleft, xright, ybottom, ytop, zn ear, zfar);透视投影将3D模型映射到相对某个观察点的平面上。函数:gluPerspective(fovy, aspect, zn ear, zfar);5, Ope nGL几何变换可以:平移, 旋转, 缩放。glTra nslatef(x, y, z); glRotatef( 0 , x, y, z); glScalef(x, y, z);为了维护几何变换和投影变换,Ope nGL维护两个栈:投影变换栈,几何变换栈。每次投影或者几何变换, 都是用相应的矩阵乘对应的栈顶元素,并替换掉上次的栈顶。 每次要计算屏幕输出时, Ope nGL采取这样的方式进行:屏幕坐标点=3D模型点*几何变换栈矩阵(n.I) *投影变换栈矩阵(n.1)。上面的n.1 表示从栈顶到栈底。更复杂点的流程是:屏幕坐标点=3D模型坐标-(几何变换矩阵)-人眼坐标-(投影变换矩阵)- 正则设备坐标(相对于OpenGL屏幕坐标原点)-校正成窗口坐标(相对于窗口坐标)一般的, 如果想变化观察模型的角度,可以在切换到几何变换栈的时候进行:glMatrixMode(GL_MODELVIEW); /模型视图矩阵glLoadlde ntity();gluLookAt(6.0, 8.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /旋转视点6,变换细节。Ope nGL使用状态机的思想。我们可以用两个函数切换当前栈。切换当前操作的栈为投影变换栈:glMatrixMode(GL_PROJECTION);切换当前操作的栈为几何变换栈:glMatrixMode(GL_MODELVIEW);其中可以使用下面的函数来清除当前操作栈的内容:glLoadIde ntity();对于几何变换栈, 还有下面两个操作可以使用:glPushMatrix();保存当前坐标系glPopMatrix(); 恢复当前坐标系glPushMatrix 复制当前栈顶,并把复制的内容再次放到栈顶上,能够保护栈上以前的内容。一般的,我们可以这样操作栈:glMatrixMode(GL_PROJECTION);切换到投影变换栈glLoadIde ntity();初始化投影变换栈gluPrespective(30.0, aspect, 1.0, 50.0);/压入透视投影矩阵glMatrixMode(GL_MODELVIEW); 切换到几何变换栈切换到GL_MODEVIEW,OpenGL自动清空几何变换栈的内容。7,关于gluLookAt。这个函数可以变换视点的位置,使得可以在不同角度观察3D模型。void gluLookAt( GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,GLdouble cen terX, GLdouble cen terY, GLdouble cen terZ,GLdouble upX, GLdouble upY, GLdouble upZ);eyeX, eyeY, eyeZ指定视点的位置。cen terX, cen terY, cen terZ指定参考点的位置。upX, upY, upZ 指定up向量(视点,即相机的顶部向上的位置)。这3个空间的点确定一个面,这个面和屏幕垂直,eye*射到屏幕视口中心,center*映射到-Z轴的方向上,up*映射到+Y方向上。还是有点郁闷.8, OpenGL下的颜色。人眼看到的只是光线。 如果物体对光线不产生任何影响,我们就看不到它, 这是透明物体。 如果它吸收了所有可见光,它就呈现出黑色。 如果它对光线产生反射,折射和不同程度的衰减,就呈现各种颜色。能自己发光的物体叫光源。多数物体本身不发光,它们的色彩是由外来光线和物体表面属性共同决定的。在同一种光线下,物体有不同的颜色,这是因为物体表面的属性不一样造成的。我们把白色光照下看见的物体的颜色当作它本来的颜色,这是因为日光是白色的。在日光照射下,白色表面几乎反射全部光线,所以,看到的色彩是白色的;黑色相反;蓝色表面吸收了蓝色以外的光线,只反射蓝色,所以我们认为它是蓝色。在不同色光下,物体的颜色会变化。在绿色光照射下,白色的表面只有绿色光可以反射,所以呈现绿色。在OpenGL下, 光线分为:发射光: 直接进入人眼。比如火光。透射光: 光源的光线透过某些透明或半透明的物体后,进入人眼。反射光:光线经过物体表面反射之后,进入人眼。这是最普遍的一种方式。9, OpenGL颜色细节。OpenGL使用RGBA色彩体系。OpenGL用一个大数组处理最终生成的图像,其中每个数组记录一个像素点的颜色,这个数组称为帧颜色缓冲区。使用glClear 来清屏(OpenGL使用背景颜色)。使用glClearColor 来指定 OpenGL的背 景颜色。10, Ope nGL物体颜色。待续。11,鼠标拾取。有时候,需要鼠标拾取 3D模型上的某个点。网上有很多介绍资料。这里有个例子:opengl /openglselectobject.asp另外,也可以使用以下的函数来获取鼠标位置的3D模型坐标:gIReadPixels, gluU nProject 。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!