X-opengl立方体的简单三维交互式几何变换实验报告+代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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')