资源简介
写一个可以交互的OpenGL应用程序,支持用户利用鼠标创建和删除2维多边形对象。基本功能包括:
对象创建:支持用户利用鼠标指定各个顶点位置,创建多边形。
对象删除: 支持用户选择一个多边形(与你的多边形保存的数据结构有关)并删除。
对象存储: 设计一种数据结构存储每个多边形的顶点与边,支持文件存盘。
提示:由于删除操作需要多边形的选择机制,你可以在设计数据结构时,把可以帮助你完成选择的信息一起保存。
扩展功能可以包括(至少选择其一):
1. 支持用户选择多边形的颜色
2. 支持用户移动多边形
3. 支持用户改变多边形单个顶点的位置
4. 支持3D多边形
代码片段和文件信息
#include
#include
#include
#include
#define MAX_POLYGONS 10
#define MAX_VERTICES 20
#define TRUE 1
#define FALSE 0
void myReshape(int int); //窗口处理事件函数
void myinit(); //初始化
void myMouse(int int int int); //鼠标事件处理函数
void myMotion(int int); //实现移动多边形功能
int pick_polygon(int x int y); //选择多边形
int pick_point(int x int y); //选择点
void color_menu(int); //颜色选择菜单
void moving_menu(int); //选择移动点或者多边形
void main_menu(int); //主菜单
void myDisplay(); //移动的图形高亮
/*定义全局变量*/
/*定义多边形的结构体类型即一种存放多边形信息的数据结构,包括颜色,是否要画出来,包围盒的边界大小,多边形中心的坐标,各顶点坐标*/
typedef struct polygon
{
int color;
bool isFill; //是否填充
bool end; //结束绘制多边形
bool used; //多边形是否被定义
int xmin xmax ymin ymax; //包围盒
float xc yc; //多边形中心
int nvertices; //顶点数目
int x[MAX_VERTICES]; //顶点
int y[MAX_VERTICES];
bool highlight = false;
} polygon;
/*定义标记变量*/
bool start = TRUE; //开始绘制新的多边形
FILE *fp = NULL; //用于存盘复盘的指针
FILE *pp = NULL;
bool Fill = FALSE; //是否填充
bool noFill = FALSE; //解除填充
bool pointMoving = FALSE; //判断是否处于移动点状态
bool picking = FALSE; //判断是否处于拾取状态,如果是,则为TRUE
bool moving = FALSE; //判断是否处于移动状态
int in_polygon = -1; //不在任何多边形的内部
int present_color = 0; //默认颜色
GLsizei wh = 800 ww = 500; //初始窗口大小
int draw_mode = 0; //绘制模式
GLfloat colors[8][3] = { { 0.0 0.0 0.0 }{ 1.0 0.0 0.0 }{ 0.0 1.0 0.0 }
{ 0.0 0.0 1.0 }{ 0.0 1.0 1.0 }{ 1.0 0.0 1.0 }{ 1.0 1.0 0.0 }
{ 1.0 1.0 1.0 } }; //颜色数组
polygon polygons[MAX_POLYGONS]; //多边形结构数组
void myReshape(int w int h) //窗口处理事件函数
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0 (GLdouble)w 0.0 (GLdouble)h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0 0 w h);
ww = w;
wh = h;
}
void myinit() //初始化
{
int i; //设置清屏颜色
glClearColor(0.0 0.0 0.0 1.0); //把所有的多边形标记为未定义的状态
for (i = 0; i {
polygons[i].used = FALSE;
polygons[i].end = FALSE;
polygons[i].isFill = FALSE;
polygons[i].nvertices = 0;
}
}
/*鼠标事件处理,功能有初始化成绘制模式,在新建多边形模式下存储点的坐标删除多边形,填充颜色,增加多边形的一个顶点*/
void myMouse(int btn int state int x int y)
{
int i j;
int a;
/*设置窗口打开后就能点击画图,不需要点击菜单开始绘图,start判断是否开始绘图。首先判断判断是否超出最大多边形数量,如果没有,就可以绘制*/
if (start)
{
moving = FALSE;
for (a = 0;a if (a == MAX_POLYGONS)
{
printf(“超出最多的多边形数!“);
exit(0);
}
polygons[a].color = present_color;
polygons[a].used = TRUE;
polygons[a].isFill = FALSE;
polygons[a].end = FALSE;
polygons[a].nvertices = 0;
in_polygon = a;
picking = FALSE;
start = FALSE;
}
y = wh - y;
if (btn == GLUT_LEFT_BUTTON && state == GLUT_UP && !picking && !moving && !pointMoving)
//增加顶点
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-05-08 09:31 GTest2\
目录 0 2017-05-07 19:50 GTest2\.git\
文件 2581 2017-05-07 19:50 GTest2\.gitattributes
文件 3997 2017-05-07 19:50 GTest2\.gitignore
文件 597 2017-05-07 19:50 GTest2\.git\config
文件 73 2017-05-07 19:50 GTest2\.git\desc
文件 23 2017-05-07 19:50 GTest2\.git\HEAD
目录 0 2017-05-07 19:50 GTest2\.git\hooks\
文件 177 2017-05-07 19:50 GTest2\.git\hooks\README.sample
文件 1096 2017-05-07 19:50 GTest2\.git\index
目录 0 2017-05-07 19:50 GTest2\.git\info\
文件 113 2017-05-07 19:50 GTest2\.git\info\exclude
目录 0 2017-05-07 19:50 GTest2\.git\logs\
文件 342 2017-05-07 19:50 GTest2\.git\logs\HEAD
目录 0 2017-05-07 19:50 GTest2\.git\logs\refs\
目录 0 2017-05-07 19:50 GTest2\.git\logs\refs\heads\
文件 342 2017-05-07 19:50 GTest2\.git\logs\refs\heads\master
文件 150 2017-05-07 19:50 GTest2\.git\ms-persist.xm
目录 0 2017-05-07 19:50 GTest2\.git\ob
目录 0 2017-05-07 19:50 GTest2\.git\ob
文件 89 2017-05-07 19:50 GTest2\.git\ob
目录 0 2017-05-07 19:50 GTest2\.git\ob
文件 178 2017-05-07 19:50 GTest2\.git\ob
目录 0 2017-05-07 19:50 GTest2\.git\ob
文件 296 2017-05-07 19:50 GTest2\.git\ob
目录 0 2017-05-07 19:50 GTest2\.git\ob
文件 1863 2017-05-07 19:50 GTest2\.git\ob
目录 0 2017-05-07 19:50 GTest2\.git\ob
文件 751 2017-05-07 19:50 GTest2\.git\ob
目录 0 2017-05-07 19:50 GTest2\.git\ob
文件 229 2017-05-07 19:50 GTest2\.git\ob
............此处省略63个文件信息
相关资源
- 计算机图形学 Bezier曲线
- 计算机图形学大作业
- 计算机图形学 Peter.Shirley
- 计算机图形学原理及实践 英文第3版
- 计算机图形学习题答案源代码.rar
- 四川大学计算机图形学
- 计算机图形学视角、纹理
- 计算机图形学几何工具算法详解 pd
- 计算机图形学实现的动画自行车
- 计算机图形学第4版高清电子书.pdf
- 计算机图形学期末大作业——保龄球
- 计算机图形学实验平移,缩放,旋转
- 浙江大学计算机图形学课件
- 计算机图形学:读入off、obj文件
- 计算机图形学第三版中心画圆法算法
- 计算机图形学源代码经典
- 山东大学计算机图形学实验二3D迷宫漫
- 《计算机图形学VC》源代码
- 天津大学-计算机图形学-复习资料.r
- 3D计算机图形学原书第三版.PDF
- 计算机图形学-基于3D图形开发技术1
- 计算机图形学清华 孙家广
- gpu zen: advanced rendering techniques 彩色高
- 计算机图形学OpenGL第三版.pdf
- 计算机图形学场景漫游
- 计算机图形学 第4版
- 交互式计算机图形学 基于OpenGL着色器
- 实时计算机图形学中文
- 计算机图形学PPT
- 3D游戏与计算机图形学中的数学方法
评论
共有 条评论