X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx

上传人:doc321 文档编号:12825597 上传时间:2021-12-06 格式:DOCX 页数:18 大小:120.36KB
返回 下载 相关 举报
X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx_第1页
第1页 / 共18页
X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx_第2页
第2页 / 共18页
X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx_第3页
第3页 / 共18页
X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx_第4页
第4页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx》由会员分享,可在线阅读,更多相关《X-opengl立方体的简单三维交互式几何变换实验报告+代码.docx(18页珍藏版)》请在三一文库上搜索。

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

2、(45,1,0.1,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);glVertex3f(

3、-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.0

4、f, -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);/ 四边形的右上glVert

5、ex3f( 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该模块设置屏幕颜色和深度缓存,设置立方体的平移,缩放,旋转变换。void display()

6、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,

7、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 myKeyboard(unsigned char key, int x, int y)if(key = 'a' | ke

8、y = '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.该模块为

9、设置键盘方向键的交互式操作。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.主函数模块,实现设置显示模式(窗口大小,位置) ,调用函数操作。int main(int argc, char* argv)glutInit(&argc,argv);/ 初始 GLUT.glu

10、tInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGB); / 设定显示模式glutInitWindowSize(400,400);/ 设定窗口大小glutInitWindowPosition(50,100); /设定窗口位置glutCreateWindow("立方体的简单三维交互式几何变换");/ 用前面指定参数创建glutReshapeFunc(reshape); 指/定重绘回调函数glutDisplayFunc(display); / 进行一些初始化工作glutKeyboardFunc( myKeyboard);/指定键盘回调

11、函数glutSpecialFunc(myspecialKeyboard); /指定键盘回调函数init();glutMainLoop();/进入无穷循环,等待事件处理功能截图 :立方体的平移:上平移下平移:左平移:右平移:放大:缩小:旋转:源程序:#include <stdlib.h>#include <GL/glut.h>#include <windows.h>float ratX = 60;float ratY = 60;float ratZ = 60;float tx=0;float ty=0;float sf=0;void DrawBox()glBe

12、gin(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

13、, -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

14、( 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);

15、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();void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/清空颜色和深度缓存glMatrixMode(GL_MODELVIEW);glLoadIdentity();/gluLookAt(2.0, 2.0, 2.

16、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();void reshape(int w

17、, 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,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_TES

18、T);/启动深度测试模式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;

19、if(key = 'c' | key = 'C')exit(0);glutPostRedisplay(); /重新调用绘制函数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();int main(int argc, char* argv)glutIni

20、t(&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();/进入无穷循环,等待事件处理

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1