版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子科技大学信息与软件工程学院实验报告电子科技大学实验报告学生姓名:王兆东 学号:2014220901008指导教师:匡平 实验地点:科A 实验时间:2015.06.08一、实验室名称:软件实验室二、实验项目名称:bresenham算法模拟演示三、实验学时:3四、实验原理:利用bresenham算法模拟演示五、实验目的: 了解图元生成意义,掌握bresenham算法过程。 掌握整数坐标概念以及线段在整数坐标系统中的生成过程 分析所产生线段的走样问题 利用opengl实现一个模拟演示程序 六、实验内容: 基于glut的opengl绘制框架实现 编写背景绘制函数void drawbackgroun
2、d() 绘制整数坐标网格,利用opengl模拟产生一个网格,以一个格子代表一个像素。产生一个300300的网格,在视点观察方向,垂直于视点方向。 编写bresenham算法函数,void drawline(point1, point2),能够实时动态产生整数坐标点,并绘制一个球替代该像素 七、实验器材(设备、元器件):PC机一台,装有C/C+语言集成开发环境。八、实验步骤: 1.搭建c+程序语言开发环境; 2.编写程序 3.运行程序,得出结果九、实验程序:#include / Header File For Windows#include / Header File For The OpenG
3、L32 Library#include / Header File For The GLu32 Library#include #include HDChDC=NULL;/ Private GDI Device ContextHGLRChRC=NULL;/ Permanent Rendering ContextHWNDhWnd=NULL;/ Holds Our Window HandleHINSTANCEhInstance;/ Holds The Instance Of The Applicationboolkeys256;/ Array Used For The Keyboard Routi
4、neboolactive=TRUE;/ Window Active Flag Set To TRUE By Defaultboolfullscreen=TRUE;/ Fullscreen Flag Set To Fullscreen Mode By Defaultstructobject/ 记录游戏中的对象intfx, fy;/ 使移动变得平滑intx, y;/ 当前游戏者的位置floatspin;/ 旋转方向;structobjectplayer;/ 玩家信息boolvline1110;/ 保存垂直方向的11根线条中,每根线条中的10段是否被走过boolhline1011;/保存水平方向的1
5、1根线条中,每根线条中的10段是否被走LRESULTCALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);/ Declaration For WndProcGLvoid ReSizeGLScene(GLsizei width, GLsizei height)/ Resize And Initialize The GL Windowif (height=0)/ Prevent A Divide By Zero Byheight=1;/ Making Height Equal OneglViewport(0,0,width,height);/ Reset The
6、 Current ViewportglMatrixMode(GL_PROJECTION);/ Select The Projection MatrixglLoadIdentity();/ Reset The Projection Matrix/ Calculate The Aspect Ratio Of The WindowgluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);/ Select The Modelview MatrixglLoadIdentity()
7、;/ Reset The Modelview Matrix LRESULT CALLBACK WndProc(HWNDhWnd,/ Handle For This WindowUINTuMsg,/ Message For This WindowWPARAMwParam,/ Additional Message InformationLPARAMlParam)/ Additional Message Informationswitch (uMsg)/ Check For Windows Messagescase WM_ACTIVATE:/ Watch For Window Activate Me
8、ssageif (!HIWORD(wParam)/ Check Minimization Stateactive=TRUE;/ Program Is Activeelseactive=FALSE;/ Program Is No Longer Activereturn 0;/ Return To The Message Loopcase WM_SYSCOMMAND:/ Intercept System Commandsswitch (wParam)/ Check System Callscase SC_SCREENSAVE:/ Screensaver Trying To Start?case S
9、C_MONITORPOWER:/ Monitor Trying To Enter Powersave?return 0;/ Prevent From Happeningbreak;/ Exitcase WM_CLOSE:/ Did We Receive A Close Message?PostQuitMessage(0);/ Send A Quit Messagereturn 0;/ Jump Backcase WM_KEYDOWN:/ Is A Key Being Held Down?keyswParam = TRUE;/ If So, Mark It As TRUEreturn 0;/ J
10、ump Backcase WM_KEYUP:/ Has A Key Been Released?keyswParam = FALSE;/ If So, Mark It As FALSEreturn 0;/ Jump Backcase WM_SIZE:/ Resize The OpenGL WindowReSizeGLScene(LOWORD(lParam),HIWORD(lParam); / LoWord=Width, HiWord=Heightreturn 0;/ Jump Back/ Pass All Unhandled Messages To DefWindowProcreturn De
11、fWindowProc(hWnd,uMsg,wParam,lParam);int InitGL(GLvoid)/ All Setup For void point(float x,float y)/glColor3f(0.0f,0.0f, 1.0f); glPointSize(7.0f); glBegin(GL_POINTS); glVertex2f(x + 0.5,y + 0.5); glEnd();void bresenham(int x0,int y0,int x1,int y1)int dx=fabs(float)(x1-x0),dy=fabs(float)(y1-y0);int p
12、= 2 * dy - dx;int twoDx=2 * dy,twoDxDy=2 * (dy -dx);int x,y;if(x0 x1)x = x1;y = y1;x1 = x0;elsex = x0;y = y0; point(x,y); while(x x1) x+; if(p 0) p += twoDx; else y+; p +=twoDxDy; point(x,y); bool l,r;int xx = -20,yy= -10;int xx1 = 30,yy1= 18;int DrawGLScene(GLvoid)/ Heres Where We Do All The Drawin
13、gglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/ Clear Screen And Depth BufferglLoadIdentity();glTranslatef(0.0f,0.0f,-100.0f); for(int i=-50;i=50;i+) glBegin(GL_LINES);/ Start Drawing Horizontal Cell Borders glVertex2f(-50,i);/ Left Side Of Horizontal Line glVertex2f(50,i);/ Right Side Of Hori
14、zontal Line glEnd(); glBegin(GL_LINES);/ Start Drawing Horizontal Cell Borders glVertex2f(i,50);/ Left Side Of Horizontal Line glVertex2f(i,-50);/ Right Side Of Horizontal Line glEnd(); glBegin(GL_LINES); glVertex2f(0,200); glVertex2f( 0,-200); glEnd(); glBegin(GL_LINES); glVertex2f(200,0); glVertex
15、2f(-200,0); glEnd();point(xx,yy);bresenham(xx,yy,xx1,yy1);return TRUE;/ Everything Went OKint WINAPI WinMain(HINSTANCEhInstance,/ InstanceHINSTANCEhPrevInstance,/ Previous InstanceLPSTRlpCmdLine,/ Command Line ParametersintnCmdShow)/ Window Show StateMSGmsg;/ Windows Message StructureBOOLdone=FALSE;
16、/ Bool Variable To Exit Loop/ Ask The User Which Screen Mode They Preferif (MessageBox(NULL,Would You Like To Run In Fullscreen Mode?, Start FullScreen?,MB_YESNO|MB_ICONQUESTION)=IDNO)fullscreen=FALSE;/ Windowed Mode/ Create Our OpenGL Windowif (!CreateGLWindow(NeHes OpenGL Framework,640,480,16,full
17、screen)return 0;/ Quit If Window Was Not Createdif (keysVK_RIGHT & (player.x0) & (player.fx=player.x*60) & (player.fy=player.y*40)player.x-;hlineplayer.xplayer.y=TRUE;if (keysVK_DOWN & (player.y0) & (player.fx=player.x*60) & (player.fy=player.y*40)player.y-;vlineplayer.xplayer.y=TRUE;while(!done)/ L
18、oop That Runs While done=FALSEif (PeekMessage(&msg,NULL,0,0,PM_REMOVE)/ Is There A Message Waiting?if (msg.message=WM_QUIT)/ Have We Received A Quit Message?done=TRUE;/ If So done=TRUEelse/ If Not, Deal With Window MessagesTranslateMessage(&msg);/ Translate The MessageDispatchMessage(&msg);/ Dispatc
19、h The Messageelse/ If There Are No Messages/ Draw The Scene. Watch For ESC Key And Quit Messages From DrawGLScene()if (active)/ Program Active?if (keysVK_ESCAPE)/ Was ESC Pressed?done=TRUE;/ ESC Signalled A Quitelse/ Not Time To Quit, Update ScreenDrawGLScene();/ Draw The SceneSwapBuffers(hDC);/ Swap Buffers (Double Buffering)if (keysVK_F1)/ Is F1 Being Pressed?keysVK_F1=FALSE;/ If So Make Key
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石柱县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)参考答案详解
- 酉阳土家族苗族自治县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(巩固)
- 南阳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及完整答案详解1套
- 屏东县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(新)
- 遂宁市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(巩固)
- 山南地区农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(达标题)
- 佛山市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(研优卷)
- 嘉义市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(轻巧夺冠)
- 2026年潮州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(培优b卷)
- 绥化市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(培优b卷)
- 2024年青岛市市属事业单位遴选考试真题
- 自体输血管理制度与技术规范
- 《电商平台提价运营策略对比分析-以拼多多与淘宝特价版为例》12000字
- 2024秋七年级英语上册 Unit 3 Is this your pencil Period 1 Section A (1a-1c)教学实录(新版)人教新目标版
- 《神经外科手术的麻醉》课件
- 2025年上半年泸州市纳溪区总工会招考社会化专职工会工作者易考易错模拟试题(共500题)试卷后附参考答案
- 网格员安全知识培训课件
- GB/T 15972.40-2024光纤试验方法规范第40部分:传输特性的测量方法和试验程序衰减
- 法院冻结所有账户执行异议申请书
- 【MOOC】地理空间数据库-战略支援部队信息工程大学 中国大学慕课MOOC答案
- JT∕T 795-2023 事故汽车修复技术规范
评论
0/150
提交评论