- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二 交互与动画
实验二 交互与动画
姓名 叶传军 学号 得分
【实验目的】
1.掌握基本交互式程序的编程方法。
2.掌握基本动画程序的编程方法。
一.实验题目
1.阅读squareMouse.c, 回答下面的问题:
(1)glFlush()函数和glClear(GL_COLOR_BUFFER_BIT)函数的作用分别是什么?(可将这两个函数注释掉,和注释前的结果对比)
(2)修改squareMouse.c,分别实现如下功能:
通过利用移动回调函数可以在不释放鼠标按钮的情况下,连续画一系列正方形;
应用被动移动回调函数,可以不用按鼠标按钮就可以连续画正方形;
按下Alt+c或Alt+C时,终止程序。
2. 编写一个程序,实现如下的功能:连续两次单击鼠标左键,以两次单击的位置作为矩形的对角线来绘制一个矩形,且该矩形各边与屏幕对齐。鼠标右键用于程序的退出。
(1)将绘制矩形的函数放在鼠标回调函数中完成。glutPostRedisplay())。
3.将正方形旋转的程序squareRotate.c改成正六边形旋转的程序。
4.创建一个绘图程序,使得可用鼠标来创建一些简单的形状,如线段,三角形,矩形,并可通过菜单来实现下列功能。要求:
(1)可改变形状的颜色。
(2)可改变形状的大小。
(3)可移动形状。
(4)可旋转形状。
(5)你能想到的任何功能。
二.设计思想
本次实验主要通过改变几个主要回调函数来实现一些图形的绘制,主要使用的回调函数有
glutMouseFunc();鼠标回调函数
glutMotionFunc();鼠标移动回调函数
glutPassiveMotionFunc();被动移动回调函数
glutKeyboardFunc();键盘回调函数
void display();显示回调函数
其中应注意每个函数参数的含义以及glutPostRedisplay()函数与display()函数的使用。
三.程序清单
1.阅读squareMouse.c, 回答下面的问题:
(1)glFlush()函数和glClear(GL_COLOR_BUFFER_BIT)函数的作用分别是什么?(可将这两个函数注释掉,和注释前的结果对比)
glFlush()函数的作用是清空OPENGL命令缓冲区,执行OPENGL程序。
GlClear(GL_COLOR_BUFFER_BIT)函数的作用是用当前背景色填充窗口。
(2)修改squareMouse.c,分别实现如下功能:
a.通过利用移动回调函数可以在不释放鼠标按钮的情况下,连续画一系列正方形;
#includestdafx.h
#include stdlib.h
#include GL/glut.h
#includemath.h
/* globals */
GLsizei wh = 300, ww = 300; /* initial window size */
GLfloat size = 5.0; /* half side length of square */
void drawSquare(int x, int y)
{
y=wh-y;
glColor3ub( (char) rand()%256, (char) rand()%256, (char) rand()%256);
//glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(x+size, y+size);
glVertex2f(x-size, y+size);
glVertex2f(x-size, y-size);
glVertex2f(x+size, y-size);
glEnd();
glFlush();
}
/* rehaping routine called whenever window is resized
or moved */
void myReshape(GLsizei w, GLsizei h)
{
/* adjust clipping box */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/* adjust viewport and clear */
glViewport(0,0,w,h);
glClearColor
文档评论(0)