OPENGL编程函数.ppt_第1页
OPENGL编程函数.ppt_第2页
OPENGL编程函数.ppt_第3页
OPENGL编程函数.ppt_第4页
OPENGL编程函数.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、OPENGL编程指导,3.1 二维图形显示,像素操作函数(画像素和读像素) 最基本的绘图函数 画(写)像素: SetPixel ( int x, int y, int color ) 读像素: int GetPixel ( int x, int y) 注意:(1)具体的语言环境使用的函数名可能不同,这里的函数名仅用于课堂教学,(2)屏幕坐标系统,坐标 原点,为了方便表示,课堂上使用常用坐标系统。 OpenGL中的坐标系统可变化。,O,Y,X,课堂 采用,Windows GDI,3.1 二维图形显示,用OpenGL实现读/写像素函数,void SetPixel(int x, int y, flo

2、at r, float g, float b ) glColor3f(r,g,b); glBegin(GL_POINTS) glVertex2i(x,y); glEnd(); float* GetPixel(int x, int y) float *rgb= new float3; glReadPixels(x,y,1,1,GL_RGB,GL_FLOAT,rgb); return rgb; ,3.5 OpenGL相关函数,坐标系:gluOrtho2D(xmin, xmax,ymin,ymax) 函数设定屏幕显示窗口的二维笛卡儿坐标系 同时gluOrtho2D指定投影方式为正交投影 正交投影是一

3、种投影变换(直接去掉一个坐标分量),采用矩阵运算,因此初始状态要设矩阵为单位矩阵 使用方法,一般在初始化OpenGL时调用,应用程序窗口大小发生变化时也需要调用 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(xmin, xmax,ymin, ymax);,(xmin, ymin),(xmax, ymax),Viewport,参数为绝对坐标,图元坐标超出部分将不显示,例3-5-1,3.5 OpenGL相关函数,#include int iWindowWidth=300,iWindowHeight=300; void init

4、(void) glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-iWindowWidth/2, iWindowWidth/2, -iWindowHeight/2, iWindowHeight/2); ,void keyboard(unsigned char key, int x, int y) switch (key) case 27:/ESC键 exit(0); break; ,void Reshape(int width, int height)/改变窗

5、口大小 glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-width/2, width/2, -height/2, height/2); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear (GL_COLOR_BUFFER_BIT); iWindowWidth = width; iWindowHeight = height; ,3.5 OpenGL相关函数,void display (void) glCle

6、ar (GL_COLOR_BUFFER_BIT); /绘制坐标系 glLineWidth(2); glColor3f (0.0, 0.0, 0.0); glBegin(GL_LINES); glVertex2i(iWindowWidth/2-5,0); glVertex2i(-iWindowWidth/2+5,0);/X glVertex2i(iWindowWidth/2-20,5); glVertex2i(iWindowWidth/2-5,0);/Arrow glVertex2i(iWindowWidth/2-5,0); glVertex2i(iWindowWidth/2-20,-5); g

7、lVertex2i(0,iWindowHeight/2-5); glVertex2i(0,-iWindowHeight/2+5);/Y glVertex2i(-5,iWindowHeight/2-20); glVertex2i(0,iWindowHeight/2-5);/Arrow glVertex2i(0,iWindowHeight/2-5);glVertex2i(5,iWindowHeight/2-20); glEnd(); glPointSize(10);/Centre glBegin(GL_POINTS); glColor3f(1,0,0); glVertex2i(0,0); glEn

8、d(); glFlush(); ,3.5 OpenGL相关函数,int main(int argc, char* argv) glutInit( ,3.5 OpenGL相关函数,图元绘制 指定图元的类型(glBegin(type)指定) 定义顶点(坐标glVertex,颜色glColor等) 结束(glEnd()) 编码方法 glBegin(type); glVertex*(); /指定顶点坐标1 glVertex*(); /指定顶点坐标2 glEnd();,3.5 OpenGL相关函数,type类型,3.5 OpenGL相关函数,画点 glBegin中的参数为GL_POINTS glVert

9、ex的后缀组成 n (i|s|f|d) v n指定坐标位数,一般取2或3 (i|s|f|d)数值类型 i(整数);s(短整数);f(浮点数);d(双精度浮点数) v:坐标数据是向量形式 例: (1)glBegin(GL_POINTS) (2)int point1=50,100; glVertex2i(50,100); int point2=750,150; glVertex2i(75,150); int point2=100,200; glVertex2i(100,200); glBegin(GL_POINTS) glEnd(); glVertex2iv(point1); ,3.5 OpenG

10、L相关函数,点的属性 颜色函数 (1) glColor(3|4)(b|d|f|i|s|ub|ui|us)(TYPE r,TYPE g,TYPE b ) (2) glColor(3|4)(b|d|f|i|s|ub|ui|us)v(TYPE *rgb ) 其中:u表示无符号 RGB色立方体 颜色模式:RGB(RGBA)和颜色表模式 大小:glPointSize(GLfloat size),3.5 OpenGL相关函数,画线 glBegin中的参数为:GL_LINES、GL_LINE_STRIP、 GL_LINE_LOOP GL_LINES:一组直线段; GL_LINE_STRIP:折线 GL_LI

11、NE_LOOP:封闭折线 例:顶点序列p1,p2,p3,p4,p5 glBegin(GL_LINES) glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5); glEnd();,3.5 OpenGL相关函数,GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP,线的属性 颜色:由点的颜色决定 宽度:glLineWidth(GLfloat width ) 只能用在glBegin之前,不能用在glBegin和glEnd之间 线型:void glLineStipple(

12、GLint factor, GLushort pattern); 使用前需要激活:glEnable(GL_LINE_STIPPLE); pattern: 16位掩码 factor:每位重复次数,3.5 OpenGL相关函数,程序:(绘制回调函数) GLfloat y; / Storage for varying Y coordinate GLint factor = 1; / Stippling factor GLushort pattern = 0 x31df;/f38d; / Stipple pattern glEnable(GL_LINE_STIPPLE); glLineWidth(2)

13、; for(y = 30.0f; y 190.0f; y += 20.0f) / Reset the repeat factor and pattern glLineStipple(factor ,pattern); / Draw the line glBegin(GL_LINES); glVertex2f(80.0f, y); glVertex2f(240.0f, y); glEnd(); factor+; ,3.5 OpenGL相关函数,扫描转换的概念 直线的扫描转换算法 DDA算法 中点算法 圆弧的扫描转换算法 中点算法 逼近算法 图元属性表示 OpenGL基本绘制图元函数,小结,4.8

14、 OpenGL相关函数,区域函数(填充作用) 矩形函数:glRecti|s|f|dv() glBegin()中的参数 GL_POLYGON、GL_TRIANGLES、 GL_TRIANGLE_STRIP、 GL_TRIANGLE_FAN 三角形的三种绘制参数,int p1=20,100,p2=50,50; int p3=110,50,p4=140,100; int p5=110,150,p6=50,150; glBegin(GL_TRIANGLES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glV

15、ertex2iv(p5); glVertex2iv(p6); glEnd();,GL_TRIANGLE_STRIP,GL_TRIANGLES,GL_TRIANGLE_FAN,p1,p1,p1,菜单函数 int glutCreateMenu(void (*func)(int value);/创建菜单 void glutAddMenuEntry(char *name, int value);/添加菜单项 void glutAddSubMenu(char *name, int menu);/添加子菜单 glutAttachMenu(int button); 例:,4.8 OpenGL相关函数,voi

16、d MenuInit() int sub_menu1 = glutCreateMenu(objectMenu); glutAddMenuEntry(直线,11); glutAddMenuEntry(多边形,12); glutCreateMenu(topMenu); glutAddSubMenu(图形,sub_menu1); glutAddMenuEntry(退出,2); glutAttachMenu(GLUT_RIGHT_BUTTON); ,void objectMenu(int id) if (id=11) GraphicsType = 11; else if (id=12) Graphic

17、sType = 12; else GraphicsType = 0; void topMenu(int id) if (id=2) exit(0); ,线框图与填充图 函数:glPloygonMode(face,displayMode) face:指定前后面。可选值:GL_FRONT、GL_BACK和GL_FRONT_AND_BACK displayMode:GL_FILL和GL_LINE,4.8 OpenGL相关函数,void display (void) glClearColor (1.0, 1.0, 1.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); gl

18、PolygonMode(GL_FRONT, GL_LINE); glBegin(GL_POLYGON); glColor3f(1.0,0,0); glVertex2f(0.5,0); glVertex2f(-0.5,0.5); glVertex2f(-0.5,-0.5); glVertex2f(0.6,-0.5); glEnd(); glFlush(); ,前向面:顶点序列逆时针顺序排列,颜色插值模式 函数:glShadeModel(mode) Mode: GL_FLAT和GL_SMOOTH 例:,4.8 OpenGL相关函数,void display (void) glClearColor

19、(1.0, 1.0, 1.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glShadeModel(GL_FLAT);/默认为GL_SMOOTH glBegin(GL_POLYGON); glColor3f(1,0,0); glVertex2f(-0.5,0.5); glColor3f(0,1,0); glVertex2f(-0.5,-0.5); glColor3f(0,0,1); glVertex2f(0.5,-0.5); glColor3f(1,1,1); glVertex2f(0.5,0.5); glEnd(); glFlush(); ,GL_FLAT方式

20、下以第1个点颜色填充,顶点数组 原因:复杂图形需要很多坐标描述,导致函数调用量大增,影响程序的执行效率 采用顶点数组减少函数调用 方法 调用函数glEnableClientState(GL_VERTEX_ARRAY), 激活顶点数组特性 调用glVertexPointer指定顶点坐标的位置和数据格式 使用与数组相关的函数绘制图形,4.8 OpenGL相关函数,例: glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 0.0, 0.0); vertex2 pt=20,100,50,50,110,50,140,100,110,150,50,150; glE

21、nableClientState(GL_VERTEX_ARRAY); glVertexPointer(2,GL_INT,0,pt); GLubyte vertIndex=0,1,2,3,4,5; glDrawElements(GL_TRIANGLES,24,GL_UNSIGNED_BYTE, vertIndex); glFlush ( );,4.8 OpenGL相关函数,4.8 OpenGL相关函数,写像素模式 16种,默认方式为GL_COPY 模式改变时,需要调用glEnable(GL_COLOR_LOGIC_OP) 设置模式:glLogicOp(GL_XOR) 例:异或模式,背景,正方形,

22、4.8 OpenGL相关函数,填充图案函数 启用函数:glEnable(GL_POLYGON_STIPPLE) 关闭函数:glDisable( GL_POLYGON_STIPPLE) 设置掩模(mask):glPolygonStipple(fillPattern) 注意:filePattern类型为GLubyte,大小为3232,GLubyte fillPattern= 0 x96,0 x96,0 x96,0 x96, 0 x84,0 x84,0 x84,0 x84, 0 x48,0 x48,0 x48,0 x48, 0 x20,0 x20,0 x20,0 x20, 0 x10,0 x10,0

23、 x10,0 x10, 0 x10,0 x10,0 x10,0 x10, 0 x18,0 x18,0 x18,0 x18, 0 x64,0 x64,0 x64,0 x64, 。(重复3次) ,4.8 OpenGL相关函数,OpenGL位图函数 void glRasterPos234SIFDV(TYPE x, TYPE y, TYPE z, TYPE w); 设置当前所画位图或图像的原点 glBitmap(width, height, x0,y0,xOffset,yOffset,bitShape) 设定当前光栅位置 该函数显示二值位图。bitShape中的元素值为0或1,当为1时,用设定的颜色绘

24、制对应的像素,否则对应像素不受影响 位图的存储模式:字节 glPixelStorei ( GL_UNPACK_ALIGNMENT, 1 ) ;,4.8 OpenGL相关函数,程序,void display() glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glColor3f (0.0, 0.0, 0.0); glRasterPos2i (100, 200); glBitmap (8, 12, 0.0, 0.0, 20.0, 20.0, rasters); glColor3f (1.0, 0.0, 0.0); glRasterPos2i (120, 220);

25、glBitmap (8, 12, 0.0, 0.0, 0.0, 0.0, rasters); glColor3f (0.0, 0.0, 1.0); glRasterPos2i (150, 200); glBitmap (8, 12, 0.0, 0.0, 0.0, 0.0, rasters); glFlush ( ); ,rasters,4.8 OpenGL相关函数,绘制字符 OpenGL基本库:位图方法,需要自己创建字库 GLUT工具包:位图和轮廓字体 位图字符函数:glutBitmapCharacter(font, character) font:指定字型,常量(如GLUT_BITMAP_8

26、_BY_13) Character:字符的ASCII码值 轮廓字符函数:glutStrokeCharacter(font, character) font:指定字型,常量(如GLUT_STROKE_ROMAN) Character:字符的ASCII码值 位图和轮廓字符比较 前者速度快,后者放大缩小不变形,4.8 OpenGL相关函数,程序,void display() glColor3f (1.0, 0.0, 0.0); glRasterPos2i (50, 50); glutBitmapCharacter (GLUT_BITMAP_9_BY_15,66); glRasterPos2i (80

27、, 50); glutBitmapCharacter (GLUT_BITMAP_TIMES_ROMAN_10,66); glColor3f (0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(50,100,0);glScalef(0.2,0.2,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,66); glPopMatrix(); glTranslatef(100,100,0); glScalef(0.6,0.6,1); glutStrokeCharacter(GLUT_STROKE_ROMAN,66); glutSw

28、apBuffers(); ,小结,多边形的扫描转换 点是否在区域内的判断方法(射线法) 扫描线算法(思想、步骤和算法实现) 多边形的区域填充 种子填充(连通性) 扇形区域的扫描转换 字符的绘制方法 OpenGL函数,5.2 反走样方法,OpenGL实例,(a)走样,(b)反走样,5.3 OpenGL函数,函数 启动反走样:glEnable(),参数为GL_POINT、GL_LINE_SMOOTH或GL_POLYGON_SMOOTH 质量控制:glHint(GLenum target, GLenum hint ), 参数target为:GL_POINT_SMOOTH_HINT、GL_LINE_S

29、MOOTH_HINT、GL_POLYGON_SMOOTH_HINT 等 参数hint为GL_FASTEST、GL_NICEST、GL_DONT_CARE 启动混合: glEnable(GL_BLEND) 选择混合因子:glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);(还有其它选择),5.3 OpenGL函数,程序例,void display (void) glColor3f(0,0,0); glLineWidth(7); glBegin(GL_LINES); glVertex2i(10,10); glVertex2i(150,70); gl

30、End(); glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glTranslatef(160,0,0); glBegin(GL_LINES); glVertex2i(10,10); glVertex2i(150,70); glEnd(); glDisable (GL_LINE_SMOOTH); glDisable (GL_BLEND); glFlush(); ,

31、小结,三种走样现象 反走样方法 提高分辨率 非加权采样 加权采样 利用OpenGL函数进行反走样处理 启动函数 质量控制函数,6.8 OpenGL几何变换函数,说明 在核心库中,每种几何变换是一个独立的函数 所有变换都是在三维坐标系中定义 基本几何变换函数 平移函数:glTranslatefd(tx, ty, tz) 对二维变换而言,取tz0 旋转函数:glRotatefd(theta, vx, vy, vz) 向量(vx, vy, vz)为通过坐标原点旋转轴 theta为旋转角的度数 放缩函数:glScalefd(sx, sy, sz) 相对坐标原点的缩放 当参数为负时,相对于平面进行对称变

32、换,6.8 OpenGL几何变换函数,例程序 6-1,void display (void) glColor3f (0.0, 0.0, 1.0); glRecti (20, 50, 100, 80); glColor3f (1.0, 0.0, 0.0); glTranslatef (-120.0, -40.0, 0.0); glRecti (20, 50, 100, 80); glLoadIdentity ( ); glColor3f (1.0, 0.0, 1.0); glRotatef (135.0, 0.0, 0.0, 1.0);glRecti (20, 50, 100, 80); glL

33、oadIdentity ( ); glColor3f ( 0.0, 1.0,0.0); glScalef (0.5, -1.0, 1.0); glRecti (20, 50, 100, 80); glColor3f(0,0,0); glLoadIdentity ( ); glBegin(GL_LINES); glVertex2i(0,-Y/2+5); glVertex2i(0,Y/2-5); glVertex2i(X/2-5,0); glVertex2i(-X/2+5,0); glEnd(); glutSwapBuffers(); ,注意: 几何变换矩阵只有1个,6.8 OpenGL几何变换函

34、数,例6-1(续),#include #include #include int X=0,Y=0; void Reshape(int width, int height) glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-width/2, width/2, -height/2, height/2); glMatrixMode(GL_MODELVIEW);/定义模型观察变换矩阵 glLoadIdentity(); glClear (GL_COLOR_BUFFER_

35、BIT); X=width, Y=height; ,void init (void) glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 250.0, 0.0, 250.0); ,例6-1(续),6.8 OpenGL几何变换函数,int main(int argc, char* argv) glutInit( ,矩阵操作 模型观察矩阵:glMatrixMode(GL_MODELVIEW) 建立当前观察矩阵 还有两种方式:投影、纹理模式,默认为观察模式 设置当前矩阵为单位矩阵:glLoad

36、Identity() 矩阵栈 3种:观察、投影、纹理 初始状态下,每栈仅包含一单位栈 压栈:glPushMatrix() 出栈:glPopMatrix(),6.8 OpenGL几何变换函数,6.8 OpenGL几何变换函数,例62 机器人 手臂,#include #define BASE_HEIGHT 2.0 #define BASE_RADIUS 1.0 #define LOWER_ARM_HEIGHT 5.0 #define LOWER_ARM_WIDTH 0.5 #define UPPER_ARM_HEIGHT 5.0 #define UPPER_ARM_WIDTH 0.5 typede

37、f float point3; GLfloat theta = 0.0,0.0,0.0; GLint axis = 0; GLUquadricObj *p; /* pointer to quadric(二次曲面) object */ void myinit() glClearColor(1.0, 1.0, 1.0, 1.0); glColor3f(1.0, 0.0, 0.0); p=gluNewQuadric(); /* allocate quadric object */ gluQuadricDrawStyle(p, GLU_LINE); /* render it as wireframe

38、*/ ,6.8 OpenGL几何变换函数,例62(续),void base() glPushMatrix();/* rotate cylinder to align with y axis */ glRotatef(-90.0, 1.0, 0.0, 0.0);/* cyliner aligned with z axis*/ gluCylinder(p, BASE_RADIUS, BASE_RADIUS, BASE_HEIGHT, 5, 5); glPopMatrix(); void upper_arm() glPushMatrix(); glTranslatef(0.0, 0.5*UPPER_

39、ARM_HEIGHT, 0.0); glScalef(UPPER_ARM_WIDTH, UPPER_ARM_HEIGHT, UPPER_ARM_WIDTH); glutWireCube(1.0); glPopMatrix(); void lower_arm() glPushMatrix(); glTranslatef(0.0, 0.5*LOWER_ARM_HEIGHT, 0.0); glScalef( LOWER_ARM_WIDTH, LOWER_ARM_HEIGHT, LOWER_ARM_WIDTH); glutWireCube(1.0); glPopMatrix(); ,void gluC

40、ylinder( GLUquadricObj *qobj, GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks );,6.8 OpenGL几何变换函数,void display(void) /* Accumulate ModelView Matrix as we traverse tree */ glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); glRotatef(theta0,

41、0.0, 1.0, 0.0); base(); glTranslatef(0.0, BASE_HEIGHT, 0.0); glRotatef(theta1, 0.0, 0.0, 1.0); lower_arm(); glTranslatef(0.0, LOWER_ARM_HEIGHT, 0.0); glRotatef(theta2, 0.0, 0.0, 1.0); upper_arm(); glutSwapBuffers(); ,void mouse(int btn, int state, int x, int y) /* left button increase joint angle, r

42、ight button decreases it */ if(btn=GLUT_LEFT_BUTTON ,思考:如果按照 upper_arm(); lower_arm(); base(); 次序绘制,如何修改程序?,6.8 OpenGL几何变换函数,void menu(int id) /* menu selects which angle to change or whether to quit */ if(id = 1 ) axis=0; if(id = 2) axis=1; if(id = 3 ) axis=2; if(id =4 ) exit(0); void myReshape(int

43、 w, int h) glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w = h) glOrtho(-10.0, 10.0, -5.0 * (GLfloat) h / (GLfloat) w, 15.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); else glOrtho(-10.0 * (GLfloat) w / (GLfloat) h, 10.0 * (GLfloat) w / (GLfloat) h, -5.0, 15.0, -10.0, 10.

44、0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); ,6.8 OpenGL几何变换函数,void main(int argc, char *argv) glutInit( ,使用双缓冲 以GLUT_DOUBLE为参数调用glutInitDisplayMode,设置双缓存的窗口模式 在显示回调函数的最后调用glutSwapBuffers()函数 空闲函数(回调函数) 定义:如 void spinCube() 功能:程序不受用户干预时执行spinCube()函数 注册:glutIdleFunc(spinCube) (在main函数中调用) 重绘制函数

45、 glutPostRedisplay(),6.8 OpenGL几何变换函数,例63:旋转的立方体 8个顶点的颜色不同 不停地旋转 鼠标控制改变方向,6.8 OpenGL几何变换函数,#include #include /定义顶点坐标和颜色 GLfloat vertices3 = -1.0,-1.0,-1.0,1.0,-1.0,-1.0, 1.0,1.0,-1.0, -1.0,1.0,-1.0, -1.0,-1.0,1.0, 1.0,-1.0,1.0, 1.0,1.0,1.0, -1.0,1.0,1.0; GLfloat colors3 = 0.0,0.0,0.0,1.0,0.0,0.0, 1.0,1.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0, 0.0,1.0,1.0;,6.8 OpenGL几何变换函数,void polygon(int a, int b, int c , int d) /

温馨提示

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

评论

0/150

提交评论