基于OpenGL 的3D图形绘制.doc

上传人:人*** 文档编号:543270755 上传时间:2022-10-11 格式:DOC 页数:16 大小:611KB
返回 下载 相关 举报
基于OpenGL 的3D图形绘制.doc_第1页
第1页 / 共16页
基于OpenGL 的3D图形绘制.doc_第2页
第2页 / 共16页
基于OpenGL 的3D图形绘制.doc_第3页
第3页 / 共16页
基于OpenGL 的3D图形绘制.doc_第4页
第4页 / 共16页
基于OpenGL 的3D图形绘制.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于OpenGL 的3D图形绘制.doc》由会员分享,可在线阅读,更多相关《基于OpenGL 的3D图形绘制.doc(16页珍藏版)》请在金锄头文库上搜索。

1、多媒体技术实验实验报告册班级:计算机1072 姓名:高磊 学号:1071301211实验二基于OpenGL的3D图形绘制一、实验目的与要求1. 学习 OpenGL 图形格式、数学原理;2. 掌握 OpenGL 基本图元的绘制,熟悉曲线、曲面、二次几何体的绘制技术;3. 掌握 OpenGL 光照、材质、纹理的基本原理;4. 掌握基于 Win32、Visual C+环境绘制3D 图形绘制原理、过程与步骤。二、实验仪器与设备1. 微型电子计算机80台2. Windows 2000以上版本操作系统80套3. Visual C+ 6.0开发系统80套4. OpenGL 2.0 以上函数库 80套三、实验

2、内容与步骤本实验主要做使用图形绘制系统,实现线条,矩形,圆,文本等基本图形的绘制,保存与打开功能。实验步骤如下。1. 设计流程图开始选择演示模式选择演示类型设置光照和材质鼠标操纵3D图形翻转、移动是否自动旋转?设置旋转速度是否结束停止转动自动旋转演示 图1设计流程图2. 关键代码解析2.1 基于Win32Conslolevoid background(void)glClearColor(0.0,0.0,0.0,0.0);/设置背景颜色为黑色void myDisplay(void)glClear(GL_COLOR_BUFFER_BIT);/buffer设置为颜色可写glBegin(GL_TRIA

3、NGLES);/开始画三角形 glShadeModel(GL_SMOOTH);/设置为光滑明暗模式glColor3f(1.0,0.0,0.0);/设置第一个顶点为红色glVertex2f(-1.0,-1.0);/设置第一个顶点的坐标glColor3f(0.0,1.0,0.0);/设置第二个顶点为绿色glVertex2f(0.0,-1.0);/设置第二个顶点的坐标glColor3f(0.0,0.0,1.0);/设置第三个顶点为蓝色glVertex2f(-0.5,1.0);/设置第三个顶点的坐标glEnd();/三角形结束glPointSize(5.0f);glBegin(GL_POINTS);g

4、lVertex2f(1.0f,-0.5f);glEnd();glLineWidth(3.0f);glBegin(GL_LINES);glColor3f(1.0,0.0,0.0);/设置第一个顶点为红色glVertex2f(0.3f,-1.0f);glColor3f(0.0,1.0,0.0);/设置第二个顶点为绿色glVertex2f(1.3f,-1.0f);glEnd();glBegin(GL_POLYGON);/画五边形glColor3f(1.0,0.0,0.0);glVertex2f(0.0f,0.0f);glColor3f(0.0,1.0,0.0);glVertex2f(1.0f,0.0

5、f);glColor3f(0.0,0.0,1.0);glVertex2f(1.5f,1.0f);glColor3f(1.0,1.0,0.0);glVertex2f(0.5f,1.5f);glColor3f(0.0,0.0,1.0);glVertex2f(-0.5f,1.0f);glEnd();/五边形结束glFlush();/强制OpenGL函数运行void myReshape(GLsizei w,GLsizei h)glViewport(0,0,w,h);/设置视口glMatrixMode(GL_PROJECTION);/指明当前矩阵为GL_PROJECTIONglLoadIdentity(

6、);/将当前矩阵置换为单位阵if(w = h)gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w); /定义二维正视投影矩阵elsegluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);glMatrixMode(GL_MODELVIEW);/指明当前矩阵为GL_MODELVIEWint main(int argc,char * argv)/*初始化*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWi

7、ndowSize(400,400);glutInitWindowPosition(200,200);/*创建窗口*/glutCreateWindow(OpenGL_Win32Console-1071301211高磊);/*绘制与显示*/background();glutReshapeFunc(myReshape);/注册当前窗口的形状变化回调函数 glutDisplayFunc(myDisplay);/注册当前窗口的显示回调函数 glutMainLoop();/进入GLUT事件处理循环 return(0);2.2 基于Win32 APIint WINAPI WinMain( HINSTANCE

8、 hInstance, /实例HINSTANCE hPrevInstance, / 前一个实例LPSTR lpCmdLine, / 命令行参数int nCmdShow) / 窗口显示状态MSG msg; / Windowsx 消息结构BOOL done=FALSE; / 用来退出循环的Bool 变量/ 创建OpenGL 窗口if (!CreateGLWindow(OpenGL_Win32C-1071301211高磊,640,480,16)return 0; / 失败退出while(!done) / 保持循环直到 done=TRUEif (PeekMessage(&msg,NULL,0,0,PM

9、_REMOVE) /有消息在等待吗?if (msg.message=WM_QUIT) /收到退出消息?done=TRUE;elseTranslateMessage(&msg); / 翻译消息DispatchMessage(&msg); / 发送消息else / 如果没有消息/ 绘制场景。监视ESC 键和来自DrawGLScene()的退出消息if (active) / 程序激活的么?if (keysVK_ESCAPE) / ESC 按下了么?done=TRUE; / ESC 发出退出信号else / 不是退出的时候,刷新屏幕DrawGLScene(); / 绘制场景SwapBuffers(hD

10、C); / 交换缓存 (双缓存)KillGLWindow(); / 销毁窗口return (msg.wParam);BOOL CreateGLWindow(char* title, int width, int height, int bits)GLuint PixelFormat; / 保存查找匹配的结果WNDCLASS wc; / 窗口类结构DWORD dwExStyle; / 扩展窗口风格DWORD dwStyle; / 窗口风格RECT WindowRect; / 取得矩形的左上角和右下角的坐标值WindowRect.left=(long)0; / 将Left 设为0WindowRec

11、t.right=(long)width; / 将Right 设为要求的宽度WindowRect.top=(long)0; / 将Top 设为0WindowRect.bottom=(long)height; / 将Bottom 设为要求的高度hInstance= GetModuleHandle(NULL); / 取得我们窗口的实例wc.style= CS_HREDRAW|CS_VREDRAW|CS_OWNDC; / 移动时重画,并为窗口取得DCwc.lpfnWndProc= (WNDPROC) WndProc; / WndProc 处理消息wc.cbClsExtra= 0; / 无额外窗口数据w

12、c.cbWndExtra= 0; / 无额外窗口数据wc.hInstance= hInstance; / 设置实例wc.hIcon= LoadIcon(NULL, IDI_WINLOGO); / 装入缺省图标wc.hCursor= LoadCursor(NULL, IDC_ARROW); / 装入鼠标指针wc.hbrBackground= NULL; / GL不需要背景wc.lpszMenuName = NULL; / 不需要菜单wc.lpszClassName= OpenGL; / 设定类名字if (!RegisterClass(&wc) / 尝试注册窗口类MessageBox(NULL,窗

13、口类注册失败!,错误,MB_OK|MB_ICONEXCLAMATION);return FALSE; /退出并返回FALSEdwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; / 扩展窗体风格dwStyle=WS_OVERLAPPEDWINDOW; / 窗体风格/ 调整窗口达到真正要求的大小AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);if (!(hWnd=CreateWindowEx( dwExStyle, / 扩展窗体风格OpenGL, / 类名字title, / 窗口标题dwStyle | / 必须的窗体风格属性WS_CLIPSIBLINGS | / 必须的窗体风格属性WS_CLIPCHILDREN, / 选择的窗体属性0, 0, / 窗口位置WindowRect.right-WindowRect.left, / 计算调整好的窗口宽度WindowRect.bottom-WindowRect.top, / 计算调整好的窗口高度NULL, / 无父窗口NULL, /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号