版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./立方体的简单三维交互式几何变换立方体的简单三维交互式几何变换。功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。程序模块:1.重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用。voidreshape<intw,inth>{ glViewport<0,0,w,h>;//指定视口的位置和大小 glMatrixMode<GL_PROJECTION>; glLoadIdentity<>; //glFrustum<-1.0,1.0,-1.0,1.0,3.1,10.0>; //gluPerspective<45,1,0.1,10.0>;glOrtho<-2.0,2.0,-2.0,2.0,2.0,10.0>;}2.绘制一个立方体。voidDrawBox<>{glBegin<GL_QUADS>; //前面 glColor3f<1,0,0>;glVertex3f<-1.0f,-1.0f,1.0f>;//四边形的左下glVertex3f<1.0f,-1.0f,1.0f>;//四边形的右下glVertex3f<1.0f,1.0f,1.0f>;//四边形的右上glVertex3f<-1.0f,1.0f,1.0f>;//四边形的左上//后面glColor3f<0,1,0>;glVertex3f<-1.0f,-1.0f,-1.0f>;//四边形的右下glVertex3f<-1.0f,1.0f,-1.0f>;//四边形的右上glVertex3f<1.0f,1.0f,-1.0f>;//四边形的左上glVertex3f<1.0f,-1.0f,-1.0f>;//四边形的左下//顶面glColor3f<0,0,1>;glVertex3f<-1.0f,1.0f,-1.0f>;//四边形的左上glVertex3f<-1.0f,1.0f,1.0f>;//四边形的左下glVertex3f<1.0f,1.0f,1.0f>;//四边形的右下glVertex3f<1.0f,1.0f,-1.0f>;//四边形的右上//底面glColor3f<1,1,0>;glVertex3f<-1.0f,-1.0f,-1.0f>;//四边形的右上glVertex3f<1.0f,-1.0f,-1.0f>;//四边形的左上glVertex3f<1.0f,-1.0f,1.0f>;//四边形的左下glVertex3f<-1.0f,-1.0f,1.0f>;//四边形的右下//右面glColor3f<0,1,1>;glVertex3f<1.0f,-1.0f,-1.0f>;//四边形的右下glVertex3f<1.0f,1.0f,-1.0f>;//四边形的右上glVertex3f<1.0f,1.0f,1.0f>;//四边形的左上glVertex3f<1.0f,-1.0f,1.0f>;//四边形的左下//左面glColor3f<1,0,1>;glVertex3f<-1.0f,-1.0f,-1.0f>;//四边形的左下glVertex3f<-1.0f,-1.0f,1.0f>;//四边形的右下glVertex3f<-1.0f,1.0f,1.0f>;//四边形的右上glVertex3f<-1.0f,1.0f,-1.0f>;//四边形的左上glEnd<>;}3.该模块设置屏幕颜色和深度缓存,设置立方体的平移,缩放,旋转变换。voiddisplay<>{ glClear<GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT>;//清空颜色和深度缓存 glMatrixMode<GL_MODELVIEW>; glLoadIdentity<>; //gluLookAt<2.0,2.0,2.0,0.0,0.0,0.0,0.0,1.0,0.0>; glTranslatef<0.0f+tx,0.0f+ty,-4.0f>;//平移变换 glScalef<1+sf,1+sf,1+sf>;//缩放变换 glRotatef<ratX,1.0f,0.0f,0.0f>;//绕X轴的旋转变换glRotatef<ratY,0.0f,1.0f,0.0f>;//绕Y轴的旋转变换glRotatef<ratZ,0.0f,0.0f,1.0f>;//绕Z轴的旋转变换 DrawBox<>;glFlush<>; glutSwapBuffers<>; }4.该模块为设置深度缓存和启动深度测试模式。voidinit<>{ glClearColor<1.0,1.0,1.0,1.0>; glEnable<GL_DEPTH_TEST>;//启动深度测试模式}5.该模块为设置键盘的交互式操作。voidmyKeyboard<unsignedcharkey,intx,inty>{ if<key=='a'||key=='A'>ratX+=2;ratY+=2;ratZ+=2;if<key=='s'||key=='S'>ratX-=2;ratY-=2;ratZ-=2;if<key=='j'||key=='J'>sf+=0.1;if<key=='k'||key=='K'>sf-=0.1;if<key=='c'||key=='C'> exit<0>;glutPostRedisplay<>;//重新调用绘制函数}6.该模块为设置键盘方向键的交互式操作。voidmyspecialKeyboard<intkey,intx,inty>{ if<key==GLUT_KEY_UP>ty+=0.1;if<key==GLUT_KEY_DOWN>ty-=0.1;if<key==GLUT_KEY_LEFT>tx-=0.1;if<key==GLUT_KEY_RIGHT>tx+=0.1;glutPostRedisplay<>;}7.主函数模块,实现设置显示模式〔窗口大小,位置,调用函数操作。intmain<intargc,char**argv>{ glutInit<&argc,argv>;//初始GLUT. glutInitDisplayMode<GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGB>;//设定显示模式 glutInitWindowSize<400,400>;//设定窗口大小 glutInitWindowPosition<50,100>;//设定窗口位置 glutCreateWindow<"立方体的简单三维交互式几何变换">;//用前面指定参数创建 glutReshapeFunc<reshape>;//指定重绘回调函数 glutDisplayFunc<display>;//进行一些初始化工作 glutKeyboardFunc<myKeyboard>;//指定键盘回调函数glutSpecialFunc<myspecialKeyboard>;//指定键盘回调函数 init<>; glutMainLoop<>;//进入无穷循环,等待事件处理}功能截图:立方体的平移:上平移下平移:左平移:右平移:放大:缩小:旋转:源程序:#include<stdlib.h>#include<GL/glut.h>#include<windows.h>floatratX=60;floatratY=60;floatratZ=60;floattx=0;floatty=0;floatsf=0;voidDrawBox<>{glBegin<GL_QUADS>;//前面 glColor3f<1,0,0>;glVertex3f<-1.0f,-1.0f,1.0f>;//四边形的左下glVertex3f<1.0f,-1.0f,1.0f>;//四边形的右下glVertex3f<1.0f,1.0f,1.0f>;//四边形的右上glVertex3f<-1.0f,1.0f,1.0f>;//四边形的左上//后面glColor3f<0,1,0>;glVertex3f<-1.0f,-1.0f,-1.0f>;//四边形的右下glVertex3f<-1.0f,1.0f,-1.0f>;//四边形的右上glVertex3f<1.0f,1.0f,-1.0f>;//四边形的左上glVertex3f<1.0f,-1.0f,-1.0f>;//四边形的左下//顶面glColor3f<0,0,1>;glVertex3f<-1.0f,1.0f,-1.0f>;//四边形的左上glVertex3f<-1.0f,1.0f,1.0f>;//四边形的左下glVertex3f<1.0f,1.0f,1.0f>;//四边形的右下glVertex3f<1.0f,1.0f,-1.0f>;//四边形的右上//底面glColor3f<1,1,0>;glVertex3f<-1.0f,-1.0f,-1.0f>;//四边形的右上glVertex3f<1.0f,-1.0f,-1.0f>;//四边形的左上glVertex3f<1.0f,-1.0f,1.0f>;//四边形的左下glVertex3f<-1.0f,-1.0f,1.0f>;//四边形的右下//右面glColor3f<0,1,1>;glVertex3f<1.0f,-1.0f,-1.0f>;//四边形的右下glVertex3f<1.0f,1.0f,-1.0f>;//四边形的右上glVertex3f<1.0f,1.0f,1.0f>;//四边形的左上glVertex3f<1.0f,-1.0f,1.0f>;//四边形的左下//左面glColor3f<1,0,1>;glVertex3f<-1.0f,-1.0f,-1.0f>;//四边形的左下glVertex3f<-1.0f,-1.0f,1.0f>;//四边形的右下glVertex3f<-1.0f,1.0f,1.0f>;//四边形的右上glVertex3f<-1.0f,1.0f,-1.0f>;//四边形的左上glEnd<>;}voiddisplay<>{ glClear<GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT>;//清空颜色和深度缓存 glMatrixMode<GL_MODELVIEW>; glLoadIdentity<>; //gluLookAt<2.0,2.0,2.0,0.0,0.0,0.0,0.0,1.0,0.0>; glTranslatef<0.0f+tx,0.0f+ty,-4.0f>;//平移变换 glScalef<1+sf,1+sf,1+sf>;//缩放变换 glRotatef<ratX,1.0f,0.0f,0.0f>;//绕X轴的旋转变换glRotatef<ratY,0.0f,1.0f,0.0f>;//绕Y轴的旋转变换glRotatef<ratZ,0.0f,0.0f,1.0f>;//绕Z轴的旋转变换 DrawBox<>;glFlush<>; glutSwapBuffers<>;}voidreshape<intw,inth>//重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用{ glViewport<0,0,w,h>;//指定视口的位置和大小 glMatrixMode<GL_PROJECTION>; glLoadIdentity<>; //glFrustum<-1.0,1.0,-1.0,1.0,3.1,10.0>; //gluPerspective<45,1,0.1,10.0>;glOrtho<-2.0,2.0,-2.0,2.0,2.0,10.0>;}voidinit<>{ glClearColor<1.0,1.0,1.0,1.0>; glEnable<GL_DEPTH_TEST>;//启动深度测试模式}voidmyKeyboard<unsignedcharkey,intx,inty>{ if<key=='a'||key=='A'>ratX+=2;ratY+=2;ratZ+=2;if<key=='s'||key=='S'>ratX-=2;ratY-=2;ratZ-=2;if<key=='j'||key=='J'>sf+=0.1;if<key=='k'||key=='K'>sf-=0.1;if<key=='c'||key=='C'> exit<0>;glutPost
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高边坡防护工程设备操作方案
- 2025年智能教育设备项目预算执行创新应用方案
- 林业血防林实施方案
- 清洁供暖设备操作手册编制方案
- 上海花博会建设方案策划
- 2025年环保治理白皮书城市污水处理技术创新方案
- 物流行业服务质量标准制度
- 海口宣传活动策划方案(3篇)
- 酒水销售活动方案策划(3篇)
- 甘孜地坪改造施工方案(3篇)
- 原料不合格处置管理培训
- 四川省成都市成华区片区联考2025-2026学年八年级(上学期)期中英语试卷(含解析)
- 2025年顺丰快递员劳动合同模板
- 2026年中考语文专题复习:标点符号 讲义
- 常见病小儿推拿培训
- 政务颁奖礼仪培训
- 疝气手术护理宣教
- 行文格式规范培训
- 肝癌破裂出血的护理
- 持续时间模型的估计与检验
- 螺旋改直升气柜施工方案
评论
0/150
提交评论