OpenGL曲线、曲面的绘制与3D模型的装载与显示

上传人:ta****u 文档编号:162036580 上传时间:2022-10-17 格式:DOCX 页数:20 大小:229.17KB
收藏 版权申诉 举报 下载
OpenGL曲线、曲面的绘制与3D模型的装载与显示_第1页
第1页 / 共20页
OpenGL曲线、曲面的绘制与3D模型的装载与显示_第2页
第2页 / 共20页
OpenGL曲线、曲面的绘制与3D模型的装载与显示_第3页
第3页 / 共20页
资源描述:

《OpenGL曲线、曲面的绘制与3D模型的装载与显示》由会员分享,可在线阅读,更多相关《OpenGL曲线、曲面的绘制与3D模型的装载与显示(20页珍藏版)》请在装配图网上搜索。

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)阅读 效果。9)OpenGL 如何装载并显示 3D MAX 导出的 3D 模型实验及代码,课外自行完成。代码 1:用四个控制点绘制一条三次 Bezier 曲线:/Demo:用四个控制顶点来画一条三次Bezier曲线#include #include #include /4个控制点的3D坐标一一z坐标全为0GLfloatctrlpoints43 = -4, -4, 0, -2, 4, 0, 2, -4, 0, 4, 4

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

4、点到参数点转换开关 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_SRC_ALPHA);*/void display(void)int i;glClear(GL_COLOR_BUFFER_B

5、IT);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);*/ glLoadIdentity();glColor3f(1.0, 0.0, 0.0);/绘制连续线段 glBegin(GL_LINE_STR

6、IP);参数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(-0.1f,0.1f,0.0f);glColor3f(0.0, 1.0, 0.0); /glLineWidth(2.0);/绘制连续线段线段数越多,曲线越光滑 gl

7、Begin(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); /绘制连续线段glBegin(GL_LINE_STRIP);设置参数t或u取值为i/60,共计61个点实验:若让t从-2变化到+2,可看到什么效果for (i = 0; i = 100; i+)

8、 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)glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); elseglOrtho(-5.0*(GLflo

9、at)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(intargc, char* argv)srand( (u

10、nsigned int)time(0) );glutInit(&argc, argv);glutlnitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);使用双缓存模式和深度缓存 glutInitWindowSize(800, 800);glutlnitWindowPosition(0, 0);glutCreateWindow(2D Bezier 曲线);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutIdleFunc(

11、display);/设置空闲时调用的函数glutMainLoop();return 0;效果图:动态曲线绘制效果图:关闭代码开关 1,打开代码开关2,查看直线反走样效果:对比分析反走样前后曲线绘制效果差异。代码2:用4*4个控制点绘制一个三次Bezier曲面线框模型/Demo: 用 4*4 个控制顶点来画一个三次 Bezier 曲面线框模型#include #include #include /* 控制点的坐标 */GLfloatctrlpoints443 = -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

12、, -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 ;voidinit(void)/背景色 glClearColor(0.0, 0.0, 0.0, 1.0);/将控制点坐标映射为曲面坐标参数:GL_MAP1_VERTEX_3, 3 维点坐标参数2和3:控制参数u的取值范围0, 1参数4: x方向元

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

14、 0.0, 1.0, 20, 0.0, 1.0);/允许深度测试 glEnable(GL_DEPTH_TEST);/代码开关 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_SRC_ALPHA);void display(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);gl

15、Color3f(0.0, 1.0, 0.0);glPushMatrix ();/代码开关 1:去掉注释查看效果;更改旋转角度参数,查看效果 /glRotatef(0.1, 1.0, 1.0, 1.0);int i, j;/生成 2D 网格坐标,以从控制点参数插值确定网格点所对应的点集所对应的坐标 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

16、(GL_LINE_STRIP);for (i = 0; i = 30; i+)glEvalCoord2f(GLfloat)j/8.0, (GLfloat)i/30.0); /固定 x 坐标时 y 方向的网格坐标 glEnd();查看网格所确定的插值点(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(G

17、Lfloat)j/8.0, (GLfloat)i/30.0, 0);glEnd();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); elseglOrtho(-5.0*(GLfloat)w

18、/(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(intargc, char* argv)srand( (unsig

19、ned int)time(0) );glutInit(&argc, argv);glutlnitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);使用双缓存模式和深度缓存 glutInitWindowSize(800, 800);glutlnitWindowPosition(0, 0);glutCreateWindow(Bezier 曲面线框模型);init();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutIdleFunc(di

20、splay);/设置空闲时调用的函数glutMainLoop();return 0;效果:未打开注释开关1 时的效果:打开注释开关1 时的效果:代码3:用4*4个控制点绘制一个三次Bezier曲面并添加光照效果/ curve.cpp : Defines the entry point for the console application./#include stdafx.h /Demo: 用 4*4 个控制顶点来画一个三次 Bezier 曲面#include #include #include /* 控制点的坐标 */GLfloatctrlpoints443 = -1.5, -1.5, 2.

21、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 ;voidinit(void)/背景色glClearColor(0.0, 0.0, 0.0, 1.0);/将控制点坐标映射为曲面坐标参数:G

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

23、EX_3);二维映射:x、y方向U和V的参数0, 1,且中间插值数量为各20个glMapGrid2f(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:设置材质与光源GLfloatambient = 0.4, 0.6, 0.2, 1.0 ;GLfloatposition = 0

24、.0, 1.0, 3.0, 1.0 ;GLfloatmat_diffuse = 0.2, 0.4, 0.8, 1.0 ;GLfloatmat_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloatmat_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

25、_diffuse); glMaterialfv(GL_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:去掉注释查看效果;更改旋转角度参数,查看效果

26、 glRotatef(1.0, 1.0, 1.0, 1.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);

27、elseglOrtho(-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) /请参考变换示例参考一文,考虑添加键盘命令,交互式来控制金字塔的旋转 switch (key)case x:case X:case 27: /ESC 键exit(0);break;default:break;int main(intarg

28、c, char* argv)srand( (unsigned int)time(0) );glutInit(&argc, argv);glutlnitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);使用双缓存模式和深度缓存 glutInitWindowSize(800, 800);glutlnitWindowPosition(0, 0); glutCreateWindow(Bezier 曲面);init();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(k

29、eyboard);glutIdleFunc(display);/设置空闲时调用的函数glutMainLoop();return 0;效果图:代码说明:从贝塞尔到 B 样条 贝塞尔曲线由起点、终点和其他控制点来影响曲线的形状。在二次贝塞尔曲线和三次贝塞尔 曲线中,可以通过调整控制点的位置而得到很好的平滑性(C2级连续性曲率级)的曲线。 当增加更多的控制点的时候,这种平滑性就被破坏了。如下图所示,前两个曲线很平滑(曲 率级的连续性),第三个曲线在增加了一个控制点之后,曲线被拉伸了,其平滑性遭到了破 坏。FIGURE 10 16 S&2i?r contiriLbty the order of Th色

30、 curve incr-eases.Thlidorthrfounil orderFihh ordtrB 样条的工作方式类似于贝塞尔曲线,但不同的是曲线被分成很多段。每段曲线的形状只受 到最近的四个控制点的影响,这样曲线就像是4 阶的贝塞尔曲线拼接起来的。这样很长的有 很多控制点的曲线就会有固定的连续性,平滑性(每一段都是C2级的连续性)。结点NURBS (非均匀有理B样条)的真正威力在于,可以调整任意一段曲线中的四个控制点的影 响力,来产生较好的平滑性。这是通过一系列结点来控制的。每个控制点都定义了两个结点 的值。结点的取值范围是u或v的定义域,而且必须是非递减的。结点的值决定了落在u、v参数

31、定义域内的控制点的影响力。下图的曲线表示控制点对一条 在u参数定义域内的具有四个单位的曲线的影响。下图表示中间点对曲线的影响更大,而且 只有在0,3范围内的控制点才会对曲线产生影响。在u、v参数定义域内的控制点对曲线的形状会有有影响,而且我们可以通过结点来控 制控制点的影响力。非均匀性就是指一个控制点的影响力的范围是可以改变的。节点(Knot )是一个(阶数+ N - 1 )的数字列表,N代表控制点数目。有时候这个列表上 的数字也称为节点矢量 ( Knot VeCtor ),这里的矢量并不是指 3D 方向。节点列表上的数字必须符合几个条件,确定条件是否符合的标准方式是在列表序列中,数 字必需维

32、持不变或变大,而且数字重复的次数不可以比阶数大。例如,阶数 3 有 15 个控 制点的 NURBS 曲线,列表数字为 0,0,0,1,2,2,2,3,7,7,9,9,9 是一个符合条件的节点列表。列 表数字为 0,0,0,1,2,2,2,2,7,7,9,9,9 则不符合,因为此列表中有四个 2,而四比阶数大 ( 阶数 为 3 )。节点值重复的次数称为节点的重数 ( Multiplicity ),在上面例子中符合条件的节点列表 中,节点值 0 的重数值为三;节点值 1 的重数值为一;节点值 2 的重数为三;节点值 7 的 重数值为二;节点值 9 的重数值为三。如果节点值重复的次数和阶数一样,该节

33、点值称为全复节点 ( Full-MultipliCity Knot )。 在上面的例子中,节点值 0、2、9 有完整的重数 只出现一次的节点值称为单纯节点 ( Simple Knot ),节点值 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 )。在 NURB

34、S 的 NU 代表“非均匀”,意味着在一条 NURBS 曲线中节点可以是非均匀的。在节点值列表中段有重复节点值的 NURBS 曲线比较不平滑,最不平滑的情形是节点列 表中段出现全复节点,代表曲线有锐角。因此,有些设计师喜欢在曲线插入或移除节点, 然后调整控制点,使曲线的造型变得平滑或尖锐。因为节点数等于 ( N + 阶数 - 1 ),N 代 表控制点的数量,所以插入一个节点会增加一个控制点,移除一个节点也会减少一个控制点。 插入节点时可以不改变 NURBS 曲线的形状,但通常移除节点必定会改变 NURBS 曲线的形 状。节点(Knot)与控制点关系:空制点和节点是一对一成对的是常见的错误概念,

35、这种情 形只发生在 1 阶的 NURBS ( 多重直线 )。较高阶数的 NURBS 的每 ( 2 x 阶数 ) 个节点是 一个群组,每 ( 阶数 + 1 ) 个控制点是一个群组。例如,一条 3 阶 7 个控制点的 NURBS 曲 线,节点是 0,0,0,1,2,5,8,8,8,前四个控制点是对应至前六个节点;第二至第五个控制点是 对应至第二至第七个节点 0,0,1,2,5,8;第三至第六个控制点是对应至第三至第八个节点 0,1,2,5,8,8;最后四个控制点是对应至最后六个节点重要: NURB 曲面上的裁剪、细分、镶嵌效果,查看网页https:代码4:用4*4个控制点绘制一个NURBS曲面并添

36、加光照效果/Demo:用4*4个控制顶点来画一个NURBS曲面并添加光照效果#include #include #include /* 控制点的坐标 */GLfloatctrlpoints443 = -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,-

37、0.5, 1.5, -2.0,0.5, 0.5, 1.0,1.5, 1.5, -1.0 ;GLUnurbsObj *theNurb; /指向一个NURBS曲面对象的指针 voidinit(void)/背景色glClearColor(0.0, 0.0, 0.0, 1.0);/代码开关3:设置材质与光源GLfloatambient = 0.4, 0.6, 0.2, 1.0 ;GLfloatposition = 1.0, 1.0, 3.0, 1.0 ;GLfloatmat_diffuse = 0.8, 0.6, 0.3, 1.0 ;GLfloatmat_specular = 0.8, 0.6, 0.

38、3, 1.0 ;GLfloatmat_shininess = 45.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_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININES

39、S, mat_shininess);/允许深度测试glDepthFunc(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

40、_TOLERANC , 5.0); gluNurbsProperty(theNurb,GLU_DISPLAY_MOD , GLU_FILL);void display(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glColor3f(0.0, 1.0, 0.0);/各控制点影响力参数设置GLfloatknots8 = 0.0, 0.0, 0.0, 0.0,10, 10, 1.0, 1.0; / NURBS曲面的控制向量 glRotatef(1.0, 0.7, -0.6, 1.0); / 旋转变换gluBeginSurface(t

41、heNurb); / 开始曲面绘制网络査询:参数GL_MAP2_VERTEX_3的作用?/将gluNurbsSurface(theNurb, 8, knots, 8, knots, 4 * 3, 3, &ctrlpoints000, 4, 4,GL_MAP2_VERTEX_3); / 定义曲面的数学模型,确定其形状gluEndSurface(theNurb); / 结束曲面绘制glutSwapBuffers();void reshape(GLsizei w, GLsizei h)glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w W/f(Aelds!P)3und9IPHnlf(pEoq 人 9|)3undpEoq 人 9|in|S f(edeqs9 jpunTBdEqs 旳(人 e|dsip)3und Ae|dsiain|S $2!仏連即 JsizegjMopuiMeieeJDWiS1(0 uopisodMopuiMlJulln|S 4008 OO8)BZ!SMopu!/v】!U|n0 些篦團姒吐宰珮些篦脈宙剥(H丄dmcT丄mm I日9旷丄mm I nwriocr丄mmpoiAi人

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

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

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


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