logo资料库

OpenGL图形绘制.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
一、实验目的和要求:
二、实验内容:
三、实验步骤:
一、实验目的和要求:
二、实验内容:
三、实验步骤:
一、实验目的和要求:
二、实验内容:
三、实验步骤:
一、实验目的和要求:
二、实验内容:
三、实验步骤:
实验一 OpenGL 基本图形绘制 实验二 OpenGL 三维投影变换 实验三 绘制 Bezier 曲线 实验四 真实感图形  实验一 OpenGL 基本图形绘制 一、实验目的和要求: 1、了解三维图形编程机制以及 OpenGL 三维图形绘制的程序结构; 2、通过编程实现简单三维图形的绘制; 3、掌握三维图形显示原理。 二、实验内容: 1、 使用 Visual C++ 6.0 和 OpenGL 编写一个简单的三维程序。 2、 建议有能力的学生进一步学习 OpenGL 的复杂功能创建效果更好的三维图形; 三、实验步骤: 1、 初步了解 OpenGL 的功能以及语法特点; 2、 下载 glut 包,复制 glut32.dll 到 winnt/system32 文件夹下,复制 glut32.lib 到 vc98/lib 文件夹下,复制 glut.h 到 vc98/include/gl 文件夹下; 3、 创建 VC 工程:选择菜单 File 中的 New 选项,弹出一个分页的对话框,选中页 Projects 中的 Win32 Console Application 项,然后填入你自己的 Project name, 如 Test,回车即可。VC 为你创建一个工作区(WorkSpace),你的项目 Test 就放 在这个工作区里; 4、 为项目添加文件:为了使用 OpenGL,我们需要在项目中加入三个相关的 Lib 文件: glu32.lib、glut32.lib、opengl32.lib,这三个文件位于 VC 安装目录下的 lib 目 录(如 c:\program files\ devstudio\vc\lib)中。选中菜单 Project->Add To Project->Files 项(或用鼠标右键),把这三个文件加入项目,在 FileView 中会 有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到 Project->Setting->Link-> Object /library Modules 即可。点击工具条中 New Text File 按钮,新建一个文本文件,存盘为 Test.c 作为你的源程序文件,再把它 加入到项目中,然后就可以开始编程了;
5、 请将下面的程序写入源文件 Test.c; #include #include const int n = 60; const GLfloat R = 0.2f; const GLfloat Pi = 3.1415926536f; void myDisplay(void) { int i; glClear(GL_COLOR_BUFFER_BIT); // glShadeModel(GL_FLAT); // glShadeModel(GL_SMOOTH); //点 glPointSize(2.0); glBegin(GL_POINTS); glVertex2f(0.0f, 0.0f); glEnd(); //由闭合折线组成的圆 glBegin(GL_LINE_LOOP); glColor3f(1.0,1.0,0.0); for(i=0; i
glVertex2f(0.9,0.8); glColor3f(0.8,0.5,0.2); glVertex2f(1.0,0.5); glEnd(); //虚线 glLineWidth(3.0); glEnable(GL_LINE_STIPPLE); glLineStipple(2, 0x0F0F); glBegin(GL_LINES); glColor3f(0.0,0.0,1.0); glVertex2f(-0.5f, 1.0f); glColor3f(1.0,1.0,1.0); glVertex2f(-0.5f,-1.0f); glEnd(); //线 glLineWidth(0.5); glDisable(GL_LINE_STIPPLE); glBegin(GL_LINES); glColor3f(1.0,0.0,0.0); glVertex2f(0.5f, 1.0f); glColor3f(1.0,1.0,1.0); glVertex2f(1.0f, 0.5f); glEnd(); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(0, 0); glutInitWindowSize(600, 600); glutCreateWindow("第一个OpenGL程序"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; } /*GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_POLYGON 单个简单填充凸多边形 GL_TRAINGLES 多组独立填充三角形 GL_QUADS 多组独立填充四边形 GL_LINE_STRIP 不闭合折线 GL_LINE_LOOP 闭合折线
GL_TRAINGLE_STRIP 线型连续填充三角形串 GL_TRAINGLE_FAN 扇形连续填充三角形串 GL_QUAD_STRIP 连续填充四边形串 */ 6、 修改绘图函数 myDisplay 中的内容,自由发挥并绘制一些简单的三维图形; 7、 调试程序并使得效果最好; 8、 完成实验报告并提交程序源代码。
 实验二 OpenGL 三维投影变换 一、实验目的和要求: 1、 进一步熟悉 OpenGL 三维绘图操作; 2、 理解三维物体的平行投影方式和透视投影方式; 3、 了解 OpenGL 的投影变换操作。 二、实验内容: 1、 使用 Visual C++ 6.0 和 OpenGL 进行简单的三维绘图,并设置不同的投影方式。 三、实验步骤: 1、 下载 glut 包,复制 glut32.dll 到 winnt/system32 文件夹下,复制 glut32.lib 到 vc98/lib 文件夹下,复制 glut.h 到 vc98/include/gl 文件夹下; 2、 创建 VC 工程:选择菜单 File 中的 New 选项,弹出一个分页的对话框,选中页 Projects 中的 Win32 Console Application 项,然后填入你自己的 Project name, 如 Test,回车即可。VC 为你创建一个工作区(WorkSpace),你的项目 Test 就放 在这个工作区里; 3、 为项目添加文件:为了使用 OpenGL,我们需要在项目中加入三个相关的 Lib 文件: glu32.lib、glut32.lib、opengl32.lib,这三个文件位于 VC 安装目录下的 lib 目 录(如 c:\program files\ devstudio\vc\lib)中。选中菜单 Project->Add To Project->Files 项(或用鼠标右键),把这三个文件加入项目,在 FileView 中会 有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到 Project->Setting->Link-> Object /library Modules 即可。点击工具条中 New Text File 按钮,新建一个文本文件,存盘为 Test.c 作为你的源程序文件,再把它 加入到项目中,然后就可以开始编程了; 4、 请将下面的程序写入源文件 Test.c;
#include static int angle = 45; //定义旋转角度 void reshape(GLsizei w,GLsizei h) { // 视口变换 glViewport (0,0,w,h); //使用glViewport来定义视口。其中前两个参数定义了视口的 左下脚(0,0表示最左下方) //后两个参数分别是宽度和高度。 // 投影变换 glMatrixMode (GL_PROJECTION); //OpenGL支持两种类型的投影变换,即透视投 影和正投影。 //投影也是使用矩阵来实现的。如果需要操作投影矩阵,需要以 //GL_PROJECTION为参数调用glMatrixMode函数。 // glLoadIdentity(); //重置模型观察矩阵 // glFrustum (-1.0, 1.0, -1.0, 1.0, 1.0, 10.0); //使用glFrustum函数可以将当前的可视空间设置为透视投影空间。 //用它之前先要用glMatrixMode()说明当前矩阵方式是投影GL_PROJECTION。 //也可以使用更常用的gluPerspective函数。 //空间可以是“正投影”的(使用glOrtho或gluOrtho2D), //也可以是“透视投影”的(使用glFrustum或gluPerspective)。 glOrtho (-1.0, 1.0, -1.0, 1.0, -1.0, 6.0); //正射投影,同glFrustum,六个参数分别为:左右垂直切面坐标,底上水平切面坐 标 //近深度切面和远深度切面的距离,可为负值。 } void myDisplay() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 模型变换 glMatrixMode (GL_MODELVIEW); glTranslatef(0.0f,0.0f,0.0f); // 物体在三个坐标上的位移值。 glRotatef(angle,0.5f,0.5f,0.0f); // 物体绕(0,0,0)到(x,y,z)的直线以逆时针旋转,参数 angle表示旋转的角度。 glScalef (1.0, 1.0, 1.0); // 三个参数分别是X、Y、Z轴向的比例变换因子。 //金字塔底边 glBegin(GL_QUADS); glVertex3f(0.5f,-0.5f,0.5f); glVertex3f(-0.5f,-0.5f,0.5f); glVertex3f(0.5f,-0.5f,-0.5f); glVertex3f(-0.5f,-0.5f,-0.5f); glEnd();
glBegin(GL_TRIANGLES); // 三角形前侧面 glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 0.5f, 0.0f); glColor3f(0.0f,0.5f,0.0f); glVertex3f(-0.5f,-0.5f, 0.5f); glColor3f(0.0f,0.0f,0.5f); glVertex3f( 0.5f,-0.5f, 0.5f); // 三角形右侧面 glColor3f(0.0f,1.0f,0.0f); glVertex3f( 0.0f, 0.5f, 0.0f); glColor3f(0.0f,0.0f,0.5f); glVertex3f( 0.5f,-0.5f, 0.5f); glColor3f(0.0f,0.5f,0.0f); glVertex3f( 0.5f,-0.5f, -0.5f); // 三角形后侧面 glColor3f(0.0f,0.0f,0.1f); glVertex3f( 0.0f, 0.5f, 0.0f); glColor3f(0.0f,0.5f,0.0f); glVertex3f( 0.5f,-0.5f, -0.5f); glColor3f(0.0f,0.0f,0.5f); glVertex3f(-0.5f,-0.5f, -0.5f); // 三角形左侧面 glColor3f(1.0f,1.0f,1.0f); glVertex3f( 0.0f, 0.5f, 0.0f); glColor3f(0.0f,0.0f,0.5f); glVertex3f(-0.5f,-0.5f,-0.5f); glColor3f(0.0f,0.5f,0.0f); glVertex3f(-0.5f,-0.5f, 0.5f); glEnd(); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(0,0); glutInitWindowSize(500,500);
glutCreateWindow("OpenGL3D坐标转换"); glutReshapeFunc(reshape); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; } 5、 修改投影方式,观察不同的投影变换效果,适当修改绘图函数 myDisplay 中的内容, 自由发挥并绘制三维图形; 6、 完成实验报告并提交程序源代码。
分享到:
收藏