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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

功能:键盘的方向键实现立方体的上下左右平移;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,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(-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.该模块设置屏幕颜色和深度缓存,设置立方体的平移,缩放,旋转变换。

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

}

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' || key == 'A')

相关文档
最新文档