计算机图形学1_第1页
计算机图形学1_第2页
计算机图形学1_第3页
计算机图形学1_第4页
计算机图形学1_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论