图形学实验报告 OpenGL实现橡皮筋技术解析.docx

上传人:b****1 文档编号:1818475 上传时间:2022-10-24 格式:DOCX 页数:11 大小:97.12KB
下载 相关 举报
图形学实验报告 OpenGL实现橡皮筋技术解析.docx_第1页
第1页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术解析.docx_第2页
第2页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术解析.docx_第3页
第3页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术解析.docx_第4页
第4页 / 共11页
图形学实验报告 OpenGL实现橡皮筋技术解析.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

图形学实验报告 OpenGL实现橡皮筋技术解析.docx

《图形学实验报告 OpenGL实现橡皮筋技术解析.docx》由会员分享,可在线阅读,更多相关《图形学实验报告 OpenGL实现橡皮筋技术解析.docx(11页珍藏版)》请在冰豆网上搜索。

图形学实验报告 OpenGL实现橡皮筋技术解析.docx

图形学实验报告图形学实验报告OpenGL实现橡皮筋技术解析实现橡皮筋技术解析计算机图形学基础实验2OpenGL实现橡皮筋技术一、实验目的及要求1.掌握橡皮筋技术的实现原理和方法;2.掌握OpenGL的双缓存技术;3.掌握OpenGL中鼠标的使用方法;4.掌握OpenGL中键盘的使用方法;二、实验环境主要是软件开发环境:

VC6.0三、实验内容1、OpenGL中利用鼠标实现橡皮筋技术的例子。

2、OpenGL中利用键盘实现橡皮筋技术的例子。

3、OpenGL实现拾取操作的例子,演示拾取操作的过程,其中拾取窗口的宽度和高度都设置为10。

四、实验结果1、利用鼠标实现橡皮筋技术的结果:

2、利于键盘实现橡皮筋技术的结果:

3、实现拾取操作的例子结果:

五、程序代码1、利用鼠标实现橡皮筋技术#includeintiPointNum=0;/已确定点的数目intx1=0,x2=0,y1=0,y2=0;/确定的点坐标intwinWidth=400,winHeight=300;/窗口的宽度和高度voidInitial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);voidChangeSize(intw,inth)winWidth=w;winHeight=h;glViewport(0,0,w,h);/指定窗口显示区域glMatrixMode(GL_PROJECTION);/设置投影参数glLoadIdentity();gluOrtho2D(0.0,winWidth,0.0,winHeight);voidDisplay(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);if(iPointNum=1)glBegin(GL_LINES);/绘制直线段glVertex2i(x1,y1);glVertex2i(x2,y2);glEnd();glutSwapBuffers();/交换缓冲区voidMousePlot(GLintbutton,GLintaction,GLintxMouse,GLintyMouse)if(button=GLUT_LEFT_BUTTON&action=GLUT_DOWN)if(iPointNum=0|iPointNum=2)iPointNum=1;x1=xMouse;y1=winHeight-yMouse;elseiPointNum=2;x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();/指定窗口重新绘制if(button=GLUT_RIGHT_BUTTON&action=GLUT_DOWN)iPointNum=0;glutPostRedisplay();voidPassiveMouseMove(GLintxMouse,GLintyMouse)if(iPointNum=1)x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();intmain(intargc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);/使用双缓存及RGB模型glutInitWindowSize(400,300);glutInitWindowPosition(100,100);glutCreateWindow(橡皮筋技术);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);/指定窗口在整形回调函数glutMouseFunc(MousePlot);/指定鼠标响应函数glutPassiveMotionFunc(PassiveMouseMove);/指定鼠标移动响应函数Initial();glutMainLoop();return0;2、利于键盘实现橡皮筋技术#includeintiPointNum=0;/已确定点的数目intx1=0,x2=0,y1=0,y2=0;/确定的点坐标intwinWidth=400,winHeight=300;/窗口的宽度和高度voidInitial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);voidChangeSize(intw,inth)winWidth=w;winHeight=h;glViewport(0,0,w,h);/指定窗口显示区域glMatrixMode(GL_PROJECTION);/设置投影参数glLoadIdentity();gluOrtho2D(0.0,winWidth,0.0,winHeight);voidDisplay(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);if(iPointNum=1)glBegin(GL_LINES);/绘制直线段glVertex2i(x1,y1);glVertex2i(x2,y2);glEnd();glutSwapBuffers();/交换缓冲区voidPassiveMouseMove(GLintxMouse,GLintyMouse)if(iPointNum=1)x2=xMouse;y2=winHeight-yMouse;glutPostRedisplay();voidKey(unsignedcharkey,intx,inty)switch(key)casep:

if(iPointNum=0|iPointNum=2)iPointNum=1;x1=x;y1=winHeight-y;elseiPointNum=2;x2=x;y2=winHeight-y;glutPostRedisplay();break;default:

break;intmain(intargc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);/使用双缓存及RGB模型glutInitWindowSize(400,300);glutInitWindowPosition(100,100);glutCreateWindow(橡皮筋技术);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);/指定窗口在整形回调函数glutKeyboardFunc(Key);/指定键盘响应函数glutPassiveMotionFunc(PassiveMouseMove);/指定鼠标移动响应函数Initial();glutMainLoop();return0;3、实现拾取操作的例子#include#includestdio.hconstGLintpickSize=32;intwinWidth=400,winHeight=300;voidInitial(void)glClearColor(1.0f,1.0f,1.0f,1.0f);voidDrawRect(GLenummode)if(mode=GL_SELECT)glPushName

(1);/压入堆栈glColor3f(1.0f,0.0f,0.0f);glRectf(60.0f,50.0f,150.0f,150.0f);if(mode=GL_SELECT)glPushName

(2);/压入堆栈glColor3f(0.0f,1.0f,0.0f);glRectf(230.0f,50.0f,330.0f,150.0f);if(mode=GL_SELECT)glPushName(3);/压入堆栈glColor3f(0.0f,0.0f,1.0f);glRectf(140.0f,140.0f,240.0f,240.0f);voidProcessPicks(GLintnPicks,GLuintpickBuffer)GLinti;GLuintname,*ptr;printf(选中的数目为%d个n,nPicks);ptr=pickBuffer;for(i=0;inPicks;i+)name=*ptr;/选中图元在堆栈中的位置ptr+=3;/跳过名字和深度信息ptr+=name-1;/根据位置信息获得选中的图元名字if(*ptr=1)printf(你选择了红色图元n);if(*ptr=2)printf(你选择了绿色图元n);if(*ptr=3)printf(你选择了蓝色图元n);ptr+;printf(nn);voidChangeSize(intw,inth)winWidth=w;winHeight=h;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,winWidth,0.0,winHeight);voidDisplay(void)glClear(GL_COLOR_BUFFER_BIT);DrawRect(GL_RENDER);glFlush();voidMousePlot(GLintbutton,GLintaction,GLintxMouse,GLintyMouse)GLuintpickBufferpickSize;GLintnPicks,vp4;if(button=GLUT_LEFT_BUTTON&action=GLUT_DOWN)glSelectBuffer(pickSize,pickBuffer);/设置选择缓冲区glRenderMode(GL_SELECT);/激活选择模式glInitNames();/初始化名字堆栈glMatrixMode(GL_PROJECTION);glPushMatrix();glLoadIdentity();glGetIntegerv(GL_VIEWPORT,vp);/定义一个1010的选择区域gluPickMatrix(GLdouble(xMouse),GLdouble(vp3-yMouse),10.0,10.0,vp);gluOrtho2D(0.0,winWidth,0.0,winHeight);DrawRect(GL_SELECT);/恢复投影变换glMatrixMode(GL_PROJECTION);glPopMatrix();glFlush();/获得选择集并输出nPicks=glRenderMode(GL_RENDER);ProcessPicks(nPicks,pickBuffer);glutPostRedisplay();intmain(intargc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,300);glutInitWindowPosition(100,100);glutCreateWindow(拾取操作);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);glutMouseFunc(MousePlot);Initial();glutMainLoop();return0;6、心得体会通常在实验过程中,可以加入自己喜欢的其他东西,不过要保证原本的基本东西没有错误。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1