OpenGL曲线曲面的绘制与3D模型的装载与显示_第1页
OpenGL曲线曲面的绘制与3D模型的装载与显示_第2页
OpenGL曲线曲面的绘制与3D模型的装载与显示_第3页
OpenGL曲线曲面的绘制与3D模型的装载与显示_第4页
OpenGL曲线曲面的绘制与3D模型的装载与显示_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验7 OpenGL曲线、曲面的绘制与3D模型的装载与显示 实验目的: 1)理解Bezier曲线、曲面绘制的基本原理;理解OpenGL中一维、二维插值求值器的用法。 2)掌握OpenGL中曲线、曲面绘图的方法,对比不同参数下的绘图效果差异; 实验要求: 1) 教师领读代码; 2) 学生上机实验; 3) 针对代码1,分别或同时去掉开关1和开关2的代码注释,查看并记录实验效果;用公式说明Bezier曲线、曲面的绘制计算过程; 4) 针对代码2,分别或同时去掉各开关,观察并记录显示效果差异;用公式说明Bezier曲面插值点的计算过程;说明线框模型与曲面模型的区别; 5) 针对代码3:实验和观察材质参

2、数、光照参数、坐标参数对实验效果的影响; 6) 理解均匀与非均匀样条有理曲线或曲面的差异; 7) 针对代码4:掌握非均匀有理B样条曲面(NURBS曲面)的曲面绘制方法; 8) 阅读/sweetdark/blog/184313代码,编写曲面裁剪和细分曲面的 效果。 9)OpenGL如何装载并显示3D MAX导出的3D模型实验及代码,课外自行完成。 代码1:用四个控制点绘制一条三次Bezier曲线: /Demo: 用四个控制顶点来画一条三次Bezier曲线 #include #include #include /4个控制点的3D坐标z坐标全为0 GLflo

3、at ctrlpoints43 = -4, -4, 0, -2, 4, 0, 2, -4, 0, 4, 4, 0 ; void init(void) /背景色 glClearColor(0.0, 0.0, 0.0, 1.0); /将控制点坐标映射为曲线坐标 /参数:GL_MAP1_VERTEX_3,3维点坐标 /参数2和3:控制参数 t或u的取值范围0, 1 维坐标33:曲线内插值点间的步长4参数/ /参数5:曲线间的补偿为顶点数4个总步长为12 /参数 6:控制点二维数组首元素地址 /note: 若是在这里设置了相关参数,后续对ctrlpoints内容更改曲线不变 glMap1f(GL_MA

4、P1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints00); /打开开关允许3维坐标控制点到参数点转换开关 glEnable(GL_MAP1_VERTEX_3); glShadeModel(GL_FLAT); /代码开关2:去掉本注释,可启用反走样 /* glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); /允许直线反走样 glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST); / Antialias the lines glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_S

5、RC_ALPHA); */ void display(void) int i; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); /代码开关1:去掉本注释,查看动态的曲线绘图效果:动态更新控制点坐标 /* for(int t = 0; t 4; t+) for(int j = 0; j 3; j+) ctrlpointstj = (rand() % 1024 / 1024.0 - 0.5) * 10; /动态映射 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints00); */

6、 glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); /绘制连续线段 glBegin(GL_LINE_STRIP); /参数t或u取值为i/30,共计31个点 for (i = 0; i = 30; i+) glEvalCoord1f(GLfloat) i/30.0); /根据4个控制点坐标的参数化插值 glEnd(); /* 显示控制点 */ glPointSize(5.0); glBegin(GL_POINTS); for (i = 0; i 4; i+) glVertex3fv(&ctrlpointsi0); glEnd(); glTranslatef

7、(-0.1f,0.1f,0.0f); glColor3f(0.0, 1.0, 0.0); /glLineWidth(2.0); /绘制连续线段线段数越多,曲线越光滑 glBegin(GL_LINE_STRIP); /设置参数t或u取值为i/60,共计61个点 /实验:若让t从-2变化到+2,可看到什么效果 for (i = 0; i = 60; i+) glEvalCoord1f(GLfloat) i/60.0); /根据4个控制点坐标的参数化插值 glEnd(); glTranslatef(-0.1f,0.1f,0.0f); glColor3f(1.0, 1.0, 1.0); /绘制连续线段

8、 glBegin(GL_LINE_STRIP); /设置参数t或u取值为i/60,共计61个点 /实验:若让t从-2变化到+2,可看到什么效果 for (i = 0; i = 100; i+) glEvalCoord1f(GLfloat) i/100.0); glEnd(); glutSwapBuffers(); /3D空间中绘制2D效果,采用正交投影 void reshape(GLsizei w, GLsizei h) glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) glOrt

9、ho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); else glOrtho(-5.0*(GLfloat)w/(GLfloat)h, 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); void keyboard(unsigned char key, int x, int y)/请参考变换示例参考一文,考虑添加键盘命令,交互式来控制金字塔的旋转 s

10、witch (key) case x: case X: case 27: /ESC键 exit(0); break; default: break; int main(int argc, char* argv) srand( (unsigned int)time(0) ); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);/使用双缓存模式和深度缓存 glutInitWindowSize(800, 800); glutInitWindowPosition(0, 0); glutCrea

11、teWindow(D Bezier曲线); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutIdleFunc(display);/设置空闲时调用的函数 glutMainLoop(); return 0; 效果图: 动态曲线绘制效果图: ,查看直线反走样效果:2,打开代码开关1关闭代码开关 对比分析反走样前后曲线绘制效果差异。 Bezier曲面线框模型2:用4*4个控制点绘制一个三次代码 Bezier曲面线框模型用4*4个控制顶点来画一个三次/Demo: #in

12、clude #include #include */* 控制点的坐标 GLfloat ctrlpoints443 = -1.5, 2.0, -1.5, 1.5, 2.0, 0.5, - 1.0, -1.5, -0.5, 1.5, 2.0-1.5, , -1.5, - 0.5, 1.0, -0.5, 1.5, 2.0, 0.5, 0.5, 1.0, 1.5, -0.5, -1.0, - 1.5, 0.5, 2.0, - 0.5, 0.5, 1.0, 0.5, 0.5, 3.0, 1.5, -1.5, 1.5, -1.5, 1.5, - 2.0, -0.5, 1.5, -2.0, 0.5, 0.5

13、, 1.0, 1.0 ;- 1.5, 1.5, void init(void) /背景色 glClearColor(0.0, 0.0, 0.0, 1.0); /将控制点坐标映射为曲面坐标 维点坐标,参数:GL_MAP1_VERTEX_33 / 的取值范围和参数 /23:控制参数u0, 1 个GLfloat3x/参数4:方向元素间的步长为 个控制点确定4个控制点曲线由4方向曲线间的步长为:参数 /5x :控制参数参数 /6-7v0, 1的取值范围 方向元素间的步长为元素12个GLfloaty8 /参数: 9/ 参数:y方向每条曲线的控制点数量为4 内容更改曲线不变若是在这里设置了相关参数,后续对

14、 /note: ctrlpoints 0, 10, 12 glMap2f(GL_MAP_VERTEX_3, , 3, 4, , 12, 4, &ctrlpoints000); 允许二维映射/ glEnable(GL_MAP2_VERTEX_3); ,且中间插值数量为各的参数V和方向、二维映射:/ xyU0, 120个 glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0); 允许深度测试 / glEnable(GL_DEPTH_TEST); 2/代码开关:启用反走样 glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH); glHint

15、(GL_LINE_SMOOTH_HINT, GL_FASTEST); / Antialias the lines glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); void display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.0, 1.0, 0.0); glPushMatrix (); /代码开关1:去掉注释查看效果;更改旋转角度参数,查看效果 /glRotatef(0.1, 1.0, 1.0, 1.0); int i, j; /生成2D网

16、格坐标,以从控制点参数插值确定网格点所对应的点集所对应的坐标 for (j = 0; j = 8; j+) glBegin(GL_LINE_STRIP); for (i = 0; i = 30; i+) glEvalCoord2f(GLfloat)i/30.0, (GLfloat)j/8.0); /固定y坐标时x方向的网格坐标 glEnd(); glBegin(GL_LINE_STRIP); for (i = 0; i = 30; i+) glEvalCoord2f(GLfloat)j/8.0, (GLfloat)i/30.0); /固定x坐标时y方向的网格坐标 glEnd(); /查看网格所

17、确定的插值点(u, v)的位置 glColor3f(1, 0, 0); glBegin(GL_POINTS); for (j = 0; j = 8; j+) for (i = 0; i = 30; i+) glVertex3f(GLfloat)i/30.0, (GLfloat)j/8.0, 0); for (i = 0; i = 30; i+) glVertex3f(GLfloat)j/8.0, (GLfloat)i/30.0, 0); glEnd(); glPopMatrix (); glutSwapBuffers(); void reshape(GLsizei w, GLsizei h)

18、glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); else glOrtho(-5.0*(GLfloat)w/(GLfloat)h, 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentit

19、y(); void keyboard(unsigned char key, int x, int y) /请参考变换示例参考一文,考虑添加键盘命令,交互式来控制金字塔的旋转 switch (key) case x: case X: case 27: /ESC键 exit(0); break; default: break; int main(int argc, char* argv) srand( (unsigned int)time(0) ); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_D

20、EPTH);/使用双缓存模式和深度缓存 glutInitWindowSize(800, 800); glutInitWindowPosition(0, 0); glutCreateWindow(Bezier曲面线框模型); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutIdleFunc(display);/设置空闲时调用的函数 glutMainLoop(); return 0; 效果: 未打开注释开关1时的效果: 1时的效果:打开注释开关 个控制点绘制一个三

21、次Bezier曲面并添加光照效果:用代码34*4 / curve.cpp : Defines the entry point for the console application. / 椣据畬敤尠瑳慤硦栮 Bezier4*4/Demo: 用个控制顶点来画一个三次曲面 #include #include #include /* 控制点的坐标 */ GLfloat ctrlpoints443 = -1.5, -1.5, 2.0, -0.5, -1.5, 2.0, 0.5, -1.5, -1.0, 1.5, -1.5, 2.0, -1.5, -0.5, 1.0, -0.5, 1.5, 2.0, 0

22、.5, 0.5, 1.0, 1.5, -0.5, -1.0, -1.5, 0.5, 2.0, -0.5, 0.5, 1.0, 0.5, 0.5, 3.0, 1.5, -1.5, 1.5, -1.5, 1.5, -2.0, -0.5, 1.5, -2.0, 0.5, 0.5, 1.0, 1.5, 1.5, -1.0 ; void init(void) /背景色 glClearColor(0.0, 0.0, 0.0, 1.0); /将控制点坐标映射为曲面坐标 维点坐标 GL_MAP1_VERTEX_3,3/参数: 的取值范围0, 1 u/参数2和3:控制参数 GLfloat 4:x方向元素间的步长

23、为3个/参数 4个控制点曲线由4个控制点确定 5/参数:x方向曲线间的步长为 0, 1 的取值范围/参数6-7:控制参数v 方向元素间的步长为:y12个GLfloat元素 参数/8 4y方向每条曲线的控制点数量为 9/参数: ctrlpoints/note: 若是在这里设置了相关参数,后续对内容更改曲线不变 glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints000); 允许二维映射 / glEnable(GL_MAP2_VERTEX_3); yx/二维映射:、方向20,且中间插值数量为各0, 1V和U的参数个 glMap

24、Grid2f(20, 0.0, 1.0, 20, 0.0, 1.0); /允许深度测试 glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); /代码开关4 :取消下面两行代码,查看曲面显示效果差异 /打开自动法矢量开关 /glEnable(GL_AUTO_NORMAL); /允许正则化法矢量 /glEnable(GL_NORMALIZE); /代码开关3:设置材质与光源 GLfloat ambient = 0.4, 0.6, 0.2, 1.0 ; GLfloat position = 0.0, 1.0, 3.0, 1.0 ; GLfloat mat_di

25、ffuse = 0.2, 0.4, 0.8, 1.0 ; GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ; GLfloat mat_shininess = 80.0 ; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_POSITION, position); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL

26、_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); void display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.0, 1.0, 0.0); /如果不希望旋转,则启用push和pop矩阵命令,并注释掉glRotatef行 /glPushMatrix(); /代码开关1:去掉注释查看效果;更改旋转角度参数,查看效果 glRotatef(1.0, 1.0, 1.0, 1.

27、0); glEvalMesh2(GL_FILL, 0, 20, 0, 20); /glPopMatrix(); glutSwapBuffers(); void reshape(GLsizei w, GLsizei h) glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); else glOrtho(-5.0*(GLf

28、loat)w/(GLfloat)h, 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); void keyboard(unsigned char key, int x, int y) /请参考变换示例参考一文,考虑添加键盘命令,交互式来控制金字塔的旋转 switch (key) case x: case X: case 27: /ESC键 exit(0); break; default: break; int main(int argc, char* ar

29、gv) srand( (unsigned int)time(0) ); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);/使用双缓存模式和深度缓存 glutInitWindowSize(800, 800); glutInitWindowPosition(0, 0); glutCreateWindow(Bezier曲面); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keybo

30、ard); glutIdleFunc(display);/设置空闲时调用的函数 glutMainLoop(); return 0; 效果图: 代码说明: B样条从贝塞尔到在二次贝塞尔曲线和三次贝 贝塞尔曲线由起点、终点和其他控制点来影响曲线的形状。曲率级)的曲级连续性C2 塞尔曲线中,可以通过调整控制点的位置而得到很好的平滑性(线。当增加更多的控制点的时候,这种平滑性就被破坏了。如下图所示,前两个曲线很平滑曲线被拉伸了,其平滑性遭到(曲率级的连续性),第三个曲线在增加了一个控制点之后,了破坏。 每段曲线的形状但不同的是曲线被分成很多段。 B样条的工作方式类似于贝塞尔曲线, 这样很长阶的贝塞尔曲

31、线拼接起来的。只受到最近的四个控制点的影响,这样曲线就像是4 级的连续性)。的有很多控制点的曲线就会有固定的连续性,平滑性(每一段都是c2 结点可以调整任意一段曲线中的四个控制点的真正威力在于,(非均匀有理B样条) NURBS每个控制点都定义了两个这是通过一系列结点来控制的。的影响力,来产生较好的平滑性。 的定义域,而且必须是非递减的。u或v结点的值。结点的取值范围是参数定义域内的控制点的影响力。下图的曲线表示控制点对v结点的值决定了落在u、 参数定义域内的具有四个单位的曲线的影响。下图表示中间点对曲线的影响更大,u一条在 而且只有在0,3范围内的控制点才会对曲线产生影响。 在u、v参数定义域

32、内的控制点对曲线的形状会有有影响,而且我们可以通过结点来控制控制点的影响力。非均匀性就是指一个控制点的影响力的范围是可以改变的。 节点 ( Knot ) 是一个 ( 阶数 + N - 1 ) 的数字列表,N 代表控制点数目。有时候这个列表上的数字也称为节点矢量 ( Knot Vector ),这里的矢量并不是指 3D 方向。 节点列表上的数字必须符合几个条件,确定条件是否符合的标准方式是在列表序列中,数字必需维持不变或变大,而且数字重复的次数不可以比阶数大。例如,阶数 3 有 15 个控制点的 NURBS 曲线,列表数字为 0,0,0,1,2,2,2,3,7,7,9,9,9 是一个符合条件的节

33、点列表。列表数字为 0,0,0,1,2,2,2,2,7,7,9,9,9 则不符合,因为此列表中有四个 2,而四比阶数大 ( 阶数为 3 )。 节点值重复的次数称为节点的重数 ( Multiplicity ),在上面例子中符合条件的节点列表中,节点值 0 的重数值为三;节点值 1 的重数值为一;节点值 2 的重数为三;节点值 7 的重数值为二;节点值 9 的重数值为三。 如果节点值重复的次数和阶数一样,该节点值称为全复节点 ( Full-Multiplicity Knot )。在上面的例子中,节点值 0、2、9 有完整的重数,只出现一次的节点值称为单纯节点 ( Simple Knot ),节点值

34、 1 和 3 为单纯节点。 如果在节点列表中是以全复节点开始,接下来是单纯节点,再以全复节点结束,而且节点值为等差,称为均匀 ( Uniform )。例如,如果阶数为 3 有 7 个控制点的 NURBS 曲线,其节点值为 0,0,0,1,2,3,4,4,4,那么该曲线有均匀的节点。如果节点值是 0,0,0,1,2,5,6,6,6 不是均匀的,称为非均匀 ( Non-Uniform )。在 NURBS 的 NU 代表“非均匀”,意味着在一条 NURBS 曲线中节点可以是非均匀的。 最不平滑的情形是节点列曲线比较不平滑,NURBS 在节点值列表中段有重复节点值的表中段出现全复节点,代表曲线有锐角。

35、因此,有些设计师喜欢在曲线插入或移除节点,然后调整控制点,使曲线的造型变得平滑或尖锐。因为节点数等于 ( N + 阶数 - 1 ),N 代表控制点的数量,所以插入一个节点会增加一个控制点,移除一个节点也会减少一个控制点。插入节点时可以不改变 NURBS 曲线的形状,但通常移除节点必定会改变 NURBS 曲线的形状。 节点(Knot)与控制点关系:控制点和节点是一对一成对的是常见的错误概念,这种情形只发生在 1 阶的 NURBS ( 多重直线 )。较高阶数的 NURBS 的每 ( 2 x 阶数 ) 个节点是一个群组,每 ( 阶数 + 1 ) 个控制点是一个群组。例如,一条 3 阶 7 个控制点的

36、 NURBS 曲线,节点是 0,0,0,1,2,5,8,8,8,前四个控制点是对应至前六个节点;第二至第五个控制点是对应至第二至第七个节点 0,0,1,2,5,8;第三至第六个控制点是对应至第三至第八个节点 0,1,2,5,8,8;最后四个控制点是对应至最后六个节点 重要:NURB曲面上的裁剪、细分、镶嵌效果,查看网页 /sweetdark/blog/184313 代码4:用4*4个控制点绘制一个NURBS曲面并添加光照效果 /Demo: 用4*4个控制顶点来画一个NURBS曲面并添加光照效果 #include #include #include /*

37、 控制点的坐标 */ GLfloat ctrlpoints443 = -1.5, -1.5, 2.0, -0.5, -1.5, 2.0, 0.5, -1.5, -1.0, 1.5, -1.5, 2.0, -1.5, -0.5, 1.0, -0.5, 1.5, 2.0, 0.5, 0.5, 1.0, 1.5, -0.5, -1.0, -1.5, 0.5, 2.0, -0.5, 0.5, 1.0, 0.5, 0.5, 3.0, 1.5, -1.5, 1.5, -1.5, 1.5, -2.0, -0.5, 1.5, -2.0, 0.5, 0.5, 1.0, 1.5, 1.5, -1.0 ; 曲面对象

38、的指针NURBS指向一个GLUnurbsObj *theNurb; / void init(void) /背景色 glClearColor(0.0, 0.0, 0.0, 1.0); /代码开关3:设置材质与光源 GLfloat ambient = 0.4, 0.6, 0.2, 1.0 ; GLfloat position = 1.0, 1.0, 3.0, 1.0 ; GLfloat mat_diffuse = 0.8, 0.6, 0.3, 1.0 ; GLfloat mat_specular = 0.8, 0.6, 0.3, 1.0 ; GLfloat mat_shininess = 45.0

39、 ; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_POSITION, position); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); /允许深度测试 glDe

40、pthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); /代码开关4:取消下面两行代码,查看曲面显示效果差异 / 打开自动法矢量开关 glEnable(GL_AUTO_NORMAL); /允许正则化法矢量 glEnable(GL_NORMALIZE); theNurb = gluNewNurbsRenderer(); / 创建一个NURBS曲面对象 /修改NURBS曲面对象的属性glu库函数 /采样sampling容错torerance gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 5.0); gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL); void displa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论