好文档 - 专业文书写作范文服务资料分享网站

opengl立方体的简单三维交互式几何变换实验报告材料+代码 

天下 分享 时间: 加入收藏 我要投稿 点赞

立方体的简单三维交互式几何变换

这个学期对opengl的学习,使我对计算机图形学的一些算法过程有了更多的了解。因为对三维图形的显示比较感兴趣,就做了立方体的简单三维交互式几何变换。

功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。 程序模块:

1.该模块为绘制一个立方体。 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(-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(); }

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

3.该模块为重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用。

void reshape(int w, int h) {

glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0); }

4.该模块为设置深度缓存和启动深度测试模式。 void init() { }

5.该模块为设置键盘的交互式操作。

void myKeyboard(unsigned char key, int x, int y) glClearColor (1.0, 1.0, 1.0, 1.0);

glEnable(GL_DEPTH_TEST); //启动深度测试模式 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);

{

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);

if(key == 'a' || key == 'A')

glutPostRedisplay(); //重新调用绘制函数 }

6.该模块为设置键盘方向键的交互式操作。 void myspecialKeyboard(int key,int x,int y){

if(key == GLUT_KEY_UP )

ty+=0.1;

opengl立方体的简单三维交互式几何变换实验报告材料+代码 

立方体的简单三维交互式几何变换这个学期对opengl的学习,使我对计算机图形学的一些算法过程有了更多的了解。因为对三维图形的显示比较感兴趣,就做了立方体的简单三维交互式几何变换。功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。程序模块:1.该模块为绘制一个立方体。void
推荐度:
点击下载文档文档为doc格式
2nhgo8gpvd6trx01723y3gzju6vsnw00dmi
领取福利

微信扫码领取福利

微信扫码分享