Xopengl立方体的简单三维交互式几何变换实验报告 代码资料.docx
- 文档编号:6199096
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:13
- 大小:80.56KB
Xopengl立方体的简单三维交互式几何变换实验报告 代码资料.docx
《Xopengl立方体的简单三维交互式几何变换实验报告 代码资料.docx》由会员分享,可在线阅读,更多相关《Xopengl立方体的简单三维交互式几何变换实验报告 代码资料.docx(13页珍藏版)》请在冰豆网上搜索。
Xopengl立方体的简单三维交互式几何变换实验报告代码资料
立方体的简单三维交互式几何变换
立方体的简单三维交互式几何变换。
功能:
键盘的方向键实现立方体的上下左右平移;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
#include
#include
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);
glutPostRedisplay();//重新调用绘制函数
}
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();
}
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();//进入无穷循环,等待事件处理
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Xopengl立方体的简单三维交互式几何变换实验报告 代码资料 Xopengl 立方体 简单 三维 交互式 几何 变换 实验 报告 代码 资料