• 大小: 14.49MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-09
  • 语言: 其他
  • 标签: 实验  

资源简介

写一个可以交互的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\description
     文件          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.xml
     目录           0  2017-05-07 19:50  GTest2\.git\objects\
     目录           0  2017-05-07 19:50  GTest2\.git\objects\0d\
     文件          89  2017-05-07 19:50  GTest2\.git\objects\0d\76fe4328089e5b63a9c4190badacfc35ef2624
     目录           0  2017-05-07 19:50  GTest2\.git\objects\14\
     文件         178  2017-05-07 19:50  GTest2\.git\objects\14\8dee6faefcccee0cc6714a1e1f60cb5ce87e22
     目录           0  2017-05-07 19:50  GTest2\.git\objects\15\
     文件         296  2017-05-07 19:50  GTest2\.git\objects\15\16aba376093d36708bc1a3248e5b9397cd2471
     目录           0  2017-05-07 19:50  GTest2\.git\objects\1c\
     文件        1863  2017-05-07 19:50  GTest2\.git\objects\1c\9a181a44b4f9a105f0dc71a40ad0284ab6a7c4
     目录           0  2017-05-07 19:50  GTest2\.git\objects\1f\
     文件         751  2017-05-07 19:50  GTest2\.git\objects\1f\f0c423042b46cb1d617b81efb715defbe8054d
     目录           0  2017-05-07 19:50  GTest2\.git\objects\7f\
     文件         229  2017-05-07 19:50  GTest2\.git\objects\7f\d44d2fc500db7f387dde34abefe34c4a7026bf
............此处省略63个文件信息

评论

共有 条评论