• 大小: 22KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签: opengl  

资源简介

利用opengl使用Microsoft Visual Studio 2005编写出来的小程序,附带着源代码

资源截图

代码片段和文件信息

#define MAX_POLYGONS 8
#define MAX_VERTICES 10
#define TRUE 1
#define FALSE 0

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std; 

void myMouse(intintintint);
void myMotion(intint);
void myDisplay();
void Reshape(intint);
void color_menu(int);
void safe_menu(int);
void main_menu(int);
int pick_polygon(int xint y);

void myinit();

typedef struct polygon
{
int color;
bool used;
int xminxmaxyminymax;
float xcyc;
int nvertices;
int x[MAX_VERTICES];
int y[MAX_VERTICES];
}polygon;

bool picking = FALSE;
bool moving = FALSE;
bool changing = false;
bool del = false;
int in_polygon = -1;
int present_color = 0;
int fs;
ifstream fin;
ofstream fout;

GLsizei wh = 500ww = 500;
int draw_mode = 0;

GLfloat colors[8][3]={{0.00.00.0}{1.00.00.0}{0.01.00.0}{0.00.01.0}{0.01.01.0}{1.00.01.0}{1.01.00.0}{1.01.01.0}};

polygon polygons[MAX_POLYGONS];

void myReshape(int wint h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0(GLdouble)w0.0(GLdouble)h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glViewport(00wh);

ww = w;
wh = h;
}

void myinit()
{
int i;
glClearColor(1.01.01.01.0);

for(i=0;i polygons[i].used=FALSE;
}

void myMouse(int btnint stateint xint y)
{
int ij;
y = wh-y;
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN && !picking && !moving)
{
moving = FALSE;
if(in_polygon>=0)
{
if(polygons[in_polygon].nvertices==MAX_VERTICES)
{
printf(“exceeds maximum number vertices\n“);
exit(0);
}
i=polygons[in_polygon].nvertices;
polygons[in_polygon].x[i]=x;
polygons[in_polygon].y[i]=y;
polygons[in_polygon].nvertices++;
}
}
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN && picking && !moving)
{
picking= FALSE;
moving =FALSE;
j=pick_polygon(xy);
if(j>=0)
{
polygons[j].used=FALSE;
in_polygon=-1;
glutPostRedisplay();
}
}
}

int pick_polygon(int xint y)
{
int i;
for(i=0;i {
if(polygons[i].used)
if((x>=polygons[i].xmin)&&(x<=polygons[i].xmax)&&(y>=polygons[i].ymin)&&(y<=polygons[i].ymax))
{
in_polygon=i;
moving = TRUE;
return(i);
}

}
printf(“not in a polygon\n“);
return(-1);
}
void myMotion(int xint y)
{
float dxdy;
int ij;
if(moving)
{
y = wh -y;
j = pick_polygon(xy);
if(j<0)
{
printf(“not in a polygon\n“);
return;
}
dx=x-polygons[j].xc;
dy=y-polygons[j].yc;
for(i=0;i {
polygons[j].x[i]+=dx;
polygons[j].y[i]+=dy;
}
polygons[j].xc+=dx;
polygons[j].yc+=dy;


if(dx>0)
polygons[j].xmax+=dx;
else
polygons[j].xmin+=dx;
if(dy>0)
polygons[j].ymax+=dy;
else
polygons[j].ymin+=dy;
glutPostRedisplay

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7278  2013-11-13 19:59  test02.cpp

     文件      47616  2013-11-17 17:40  实验模板.doc

     文件      61440  2013-11-17 17:33  实验二(2).exe

----------- ---------  ---------- -----  ----

               116334                    3


评论

共有 条评论