版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、立方体的简单三维交互式几何变换立方体的简单三维交互式几何变换。功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。程序模块:1.重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用。void reshape(int w, int h) 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
2、,10.0);glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0);2.绘制一个立方体。void DrawBox() 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); g
3、lVertex3f(-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);
4、/ 四边形的右下 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); / 四边形
5、的右下 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.0
6、f); / 四边形的左上 glEnd();3该模块设置屏幕颜色和深度缓存,设置立方体的平移,缩放,旋转变换。void display()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); /缩放变换
7、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.该模块为设置深度缓存和启动深度测试模式。void init()glClearColor (1.0, 1.0, 1.0, 1.0); glEnable(GL_DEPTH_TEST); /启动深度测试模式5.该模块为设置键盘的交互式操作。void myKeyb
8、oard(unsigned char key, int x, int y)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 = '
9、c' | key = 'C')exit(0);glutPostRedisplay(); /重新调用绘制函数6.该模块为设置键盘方向键的交互式操作。void myspecialKeyboard(int key,int x,int y)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.主函数模块,实现设置显示模式(窗口大小,位置),
10、调用函数操作。int main(int argc, char* argv)glutInit(&argc,argv); / 初始 GLUT.glutInitDisplayMode (GLUT_DEPTH |GLUT_DOUBLE | GLUT_RGB); /设定显示模式 glutInitWindowSize(400,400); / 设定窗口大小glutInitWindowPosition(50,100); / 设定窗口位置glutCreateWindow("立方体的简单三维交互式几何变换"); / 用前面指定参数创建glutReshapeFunc(reshape);
11、/指定重绘回调函数glutDisplayFunc(display); / 进行一些初始化工作glutKeyboardFunc( myKeyboard); /指定键盘回调函数 glutSpecialFunc(myspecialKeyboard); /指定键盘回调函数init();glutMainLoop();/ 进入无穷循环,等待事件处理功能截图:立方体的平移:上平移下平移:左平移:右平移:放大:缩小:旋转:源程序:#include <stdlib.h>#include <GL/glut.h> #include <windows.h>float ratX =
12、60;float ratY = 60;float ratZ = 60;float tx=0;float ty=0;float sf=0;void DrawBox() 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
13、(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.0
14、f, 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.
15、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,
16、1.0f, -1.0f); / 四边形的左上 glEnd();void display()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
17、.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();void reshape(int w, int h) /重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用glViewport(0, 0, w, h);/ 指定视口的位置和大小glMatrixMode(GL_PROJECTION);glLoadIdentity();/glFrustum(-1.0, 1
18、.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);void init()glClearColor (1.0, 1.0, 1.0, 1.0); glEnable(GL_DEPTH_TEST); /启动深度测试模式void myKeyboard(unsigned char key, int x, int y)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(); /重新调用绘制函数void myspecialKeyboar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/Z 44048-2024风能发电系统风力发电机组功率性能测试的数值场标定方法
- 浙教版五年级上册数学第一单元 小数的意义与加减法 测试卷及完整答案【各地真题】
- 2024年购销合同分期付款条款
- 诚信为魂不抄袭作业保证书
- 调峰天然气订购合同
- 货架订购销售协议
- 质量保证书撰写技巧指南汇编设计
- 购买招标文件情况单
- 车辆行驶期间车辆安全行驶保证书
- 软件优化合同模板
- 媒体法与新闻报道媒体侵权与法律追责
- 2024年物流运营与成本控制培训资料
- 服刑人员宪法知识讲座
- 富马酸奥赛利定注射液-药品临床应用解读
- 劳务派遣劳务外包服务方案(技术方案)
- 建筑工程竣工验收消防查验文件-消防施工质量专项检查表(主体阶段)-消防施工质量专项检查表装饰装修阶
- 煤气发生炉拆除方案
- (完整版)高中语文教师个人三年发展规划
- 苏教版数学五年级上册全册教学反思(版本1)
- 广东盈科材料有限公司年产64吨高端元器件用电子浆料和LTCC瓷粉建设项目环境影响报告表
- 会计学专业导论PPT
评论
0/150
提交评论