手机版

南邮计算机图形学实验报告(修正版)资料

发布时间:2024-11-17   来源:未知    
字号:

实验报告

实验名称指导教师

实验类型综合实验学时 2 实验时间

一、实验目的和要求

能够灵活的运用OpenGL图形API函数,基于C++程序语言,结合操作系统交互接口实现交互式3D动画。

基于实验1的基本内容,设计增加键盘及鼠标输入的互动,实现三维物体交互式运动效果。(物体的旋转或平移);

1.所有图形(例如球体,正方体)有清晰的轮廓,实现3D交互动画效果。

2.学会导入Vertex的其他属性,如normal,texture,实现纹理映射。

1

二、实验环境(实验设备)

硬件:微机

软件:vs2012

2

实验报告

3

三、实验过程描述与结果分析

实验代码:

#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()

{

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

// 四边形的右上

4

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

// 四边形的右上

// 底面

5

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

6

// 四边形的左下

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.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轴的旋转变换

7

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

8

//启动深度测试模式

}

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 myspecialKeyboard(int key,int x,int y)

{

9

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)

{

glutInit(&argc,argv); // 初始GLUT.

glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|

GLUT_RGB); //设定显示模式

glutInitWindowSize(400,400); // 设定窗口大小

glutInitWindowPosition(50,100); // 设定窗口位置

glutCreateWindow("立方体的简单三维交互式几何变换"); // 用前面指定参数创建

glutReshapeFunc(reshape); //指定重绘回调函数

glutDisplayFunc(display); // 进行一些初始化工作

glutKeyboardFunc( myKeyboard); //指定键盘回调函数

10

glutSpecialFunc(myspecialKeyboard); //指定键盘回调函数init();

glutMainLoop();// 进入无穷循环,等待事件处理

}

实验结果图:

实验报告

11

四、实验小结(包括问题和解决方法、心得体会、意见与建议等)

通过此次实验灵活的运用OpenGL图形API函数,基于C++程序语言,结合操作系统交互接口实现了交互式3D动画。

基于实验1的基本内容,增加了键盘及鼠标输入的互动,实现了三维物体交互式运动效果。(物体的旋转或平移);

五、指导教师评语

成绩批阅人日期

12

南邮计算机图形学实验报告(修正版)资料.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)