Вот код.
Код:
#include "glut.h"
#include <stdlib.h>
double memorkoord;
char koordin[]="";
void draw_string(void *font, const char* string)
{int i(0),k(0),t(0);
while(string[k]!=NULL)
{
if(string[k++]=='.')
{
t=1;
break;
}
}
while((i++)<5+t)
glutStrokeCharacter(font, *string++);
}
#include "window_0.h"
#include "window_1.h"
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(500, 400);
glutInitWindowPosition(0, 0);
glutCreateWindow("New Cross");
glClearColor(0.0, 0.0, 0.0, 0.0);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutFullScreen();
glutInitWindowSize(800, 600);
glutInitWindowPosition(0, 0);
glutCreateWindow("OKHO");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse1);
glutReshapeFunc(reshape1);
glutDisplayFunc(display1);
glutFullScreen();
glutHideWindow();
glutMainLoop();
}
теперь window_0.h
Код:
void DrawButton(GLenum mode)
{
GLuint i, j;
for (i=0; i<3; i++){
if(mode==GL_SELECT)
glLoadName(i);
for(j=0; j<3; j++){
if(mode==GL_SELECT)
glPushName(j);
if(i==0 && j==1)
{
glBegin(GL_QUADS);
glVertex3f(200.0, 200.0, 0.0);
glVertex3f(300.0, 200.0, 0.0);
glVertex3f(300.0, 400.0, 0.0);
glVertex3f(200.0, 400.0, 0.0);
glEnd();
}
if (mode==GL_SELECT)
glPopName();
}
}
}
void processHits(GLint hits, GLuint buffer[])
{
unsigned int i, j;
GLuint ii,jj, names, *ptr;
ptr=(GLuint *) buffer;
for (i=0; i<hits; i++){
names=*ptr;
ptr++; ptr++; ptr++;
for(j=0;j<names; j++){
if (j==0)
ii= *ptr;
else if(j==1)
jj= *ptr;
ptr++;
}
if(ii==0 && jj==1)
{ glutDestroyWindow(1);
glutSetWindow(2);
glutShowWindow();
}
}
}
#define BUFSIZE 512
void mouse(int button, int state, int x, int y)
{
GLuint selectBuf[BUFSIZE];
GLint hits;
GLint viewport[4];
if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN)
return;
glGetIntegerv (GL_VIEWPORT, viewport);
glSelectBuffer (BUFSIZE, selectBuf);
(void) glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode (GL_PROJECTION);
glPushMatrix ();
glLoadIdentity ();
gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y), 0.1, 0.1, viewport);
glOrtho(0.0, 800.0, 0.0, 800.0, -1000.0, 1000.0);
DrawButton(GL_SELECT);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glFlush();
hits=glRenderMode(GL_RENDER);
processHits(hits, selectBuf);
glutPostRedisplay();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 27:
exit(0);
break;
default:
break;
}
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
DrawButton(GL_RENDER);
glutSwapBuffers();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, w, 0.0, w, -10000.0, 10000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
Теперь "window_1.h"
Код:
char koord[5]="";
char number[]="0";
char plus[1]={'+'};
void DrawButton1(GLenum mode)
{
GLuint i, j;
for (i=0; i<3; i++){
if(mode==GL_SELECT)
glLoadName(i);
for(j=0; j<5; j++){
if(mode==GL_SELECT)
glPushName(j);
if(i==0 && j==0)
{
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(0.0f, 0.0f);
glVertex2f(1.0f, 0.0f);
glVertex2f(1.0f, 2.0f);
glVertex2f(0.0f, 2.0f);
glEnd();
}
if(i==0 && j==1)
{
glBegin(GL_QUADS);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(1.0f, 0.0f);
glVertex2f(2.0f, 0.0f);
glVertex2f(2.0f, 2.0f);
glVertex2f(1.0f, 2.0f);
glEnd();
}
if(i==0 && j==2)
{
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 1.0);
glVertex2f(2.0f, 0.0f);
glVertex2f(3.0f, 0.0f);
glVertex2f(3.0f, 2.0f);
glVertex2f(2.0f, 2.0f);
glEnd();
}
if(i==0 && j==3)
{
glBegin(GL_QUADS);
glColor3f(1.0, 1.0, 0.0);
glVertex2f(3.0f, 0.0f);
glVertex2f(4.0f, 0.0f);
glVertex2f(4.0f, 2.0f);
glVertex2f(3.0f, 2.0f);
glEnd();
}
if(i==0 && j==4)
{
glBegin(GL_QUADS);
glColor3f(0.0, 1.0, 1.0);
glVertex2f(4.0f, 0.0f);
glVertex2f(5.0f, 0.0f);
glVertex2f(5.0f, 2.0f);
glVertex2f(4.0f, 2.0f);
glEnd();
}
if(i==1 && j==0)
{
glBegin(GL_QUADS);
glColor3f(1.0f, 1.0f, 1.0);
glVertex2f(0.0f, 2.0f);
glVertex2f(1.0f, 2.0f);
glVertex2f(1.0f, 4.0f);
glVertex2f(0.0f, 4.0f);
glEnd();
}
if(i==1 && j==1)
{
glBegin(GL_QUADS);
glColor3f(0.5f, 0.0f, 1.0f);
glVertex2f(1.0f, 2.0f);
glVertex2f(2.0f, 2.0f);
glVertex2f(2.0f, 4.0f);
glVertex2f(1.0f, 4.0f);
glEnd();
}
if(i==1 && j==2)
{
glBegin(GL_QUADS);
glColor3f(0.0f, 0.5f, 0.0f);
glVertex2f(2.0f, 2.0f);
glVertex2f(3.0f, 2.0f);
glVertex2f(3.0f, 4.0f);
glVertex2f(2.0f, 4.0f);
glEnd();
}
if(i==1 && j==3)
{
glBegin(GL_QUADS);
glColor3f(0.5f, 0.5f, 0.5f);
glVertex2f(3.0f, 2.0f);
glVertex2f(4.0f, 2.0f);
glVertex2f(4.0f, 4.0f);
glVertex2f(3.0f, 4.0f);
glEnd();
}
if(i==1 && j==4)
{
glBegin(GL_QUADS);
glColor3f(1.0f, 0.5f, 1.0f);
glVertex2f(4.0f, 2.0f);
glVertex2f(5.0f, 2.0f);
glVertex2f(5.0f, 4.0f);
glVertex2f(4.0f, 4.0f);
glEnd();
}
if(i==2 && j==0)
{
glBegin(GL_QUADS);
glColor3f(0.5f, 0.2f, 0.8f);
glVertex2f(0.0f, 4.0f);
glVertex2f(1.0f, 4.0f);
glVertex2f(1.0f, 6.0f);
glVertex2f(0.0f, 6.0f);
glEnd();
}
if(i==2 && j==1)
{
glBegin(GL_QUADS);
glColor3f(0.0f, 0.1f, 0.5f);
glVertex2f(1.0f, 4.0f);
glVertex2f(2.0f, 4.0f);
glVertex2f(2.0f, 6.0f);
glVertex2f(1.0f, 6.0f);
glEnd();
}
if(i==2 && j==2)
{
glBegin(GL_QUADS);
glColor3f(0.1f, 0.8f, 0.2f);
glVertex2f(2.0f, 4.0f);
glVertex2f(3.0f, 4.0f);
glVertex2f(3.0f, 6.0f);
glVertex2f(2.0f, 6.0f);
glEnd();
}
if(i==2 && j==3)
{
glBegin(GL_QUADS);
glColor3f(0.8f, 0.5f, 0.2f);
glVertex2f(3.0f, 4.0f);
glVertex2f(4.0f, 4.0f);
glVertex2f(4.0f, 6.0f);
glVertex2f(3.0f, 6.0f);
glEnd();
}
if(i==2 && j==4)
{
glBegin(GL_QUADS);
glColor3f(0.2f, 0.5f, 0.8f);
glVertex2f(4.0f, 4.0f);
glVertex2f(5.0f, 4.0f);
glVertex2f(5.0f, 6.0f);
glVertex2f(4.0f, 6.0f);
glEnd();
}
if(mode==GL_SELECT)
glPopName();
}
}
}
void processHits1(GLint hits, GLuint buffer[])
{
unsigned int i, j;
GLuint ii,jj, names, *ptr;
ptr=(GLuint *) buffer;
for (i=0; i<hits; i++){
names=*ptr;
ptr++; ptr++; ptr++;
for(j=0;j<names; j++){
if (j==0)
ii= *ptr;
else if(j==1)
jj= *ptr;
ptr++;
}
if(ii==0 && jj==0)
{ int h;
h=glutGetWindow();
*plus='+';
}
if(ii==0 && jj==1)
{
*plus='-';
}
if(ii==0 && jj==2)
{
number[0]='.';
strcat(koord, number);
}
if(ii==0 && jj==3)
{
strcat(koordin, plus);
strcat(koordin, koord);
memorkoord=atof(koordin);
[color=blue] [size=18]glutDestroyWindow(2);[/[/size]color]
*plus='+';
*koord=' ';
*number='0';
}
if(ii==0 && jj==4)
{
}
if(ii==1 && jj==0)
{
number[0]='0';
strcat(koord, number);
}
if(ii==1 && jj==1)
{
number[0]='1';
strcat(koord, number);
}
if(ii==1 && jj==2)
{
number[0]='2';
strcat(koord, number);
}
if(ii==1 && jj==3)
{
number[0]='3';
strcat(koord, number);
}
if(ii==1 && jj==4)
{
number[0]='4';
strcat(koord, number);
}
if(ii==2 && jj==0)
{
number[0]='5';
strcat(koord, number);
}
if(ii==2 && jj==1)
{
number[0]='6';
strcat(koord, number);
}
if(ii==2 && jj==2)
{
number[0]='7';
strcat(koord, number);
}
if(ii==2 && jj==3)
{
number[0]='8';
strcat(koord, number);
}
if(ii==2 && jj==4)
{
number[0]='9';
strcat(koord, number);
}
}
}
#define BUFSIZE 512
void mouse1(int button, int state, int x, int y)
{
GLuint selectBuf[BUFSIZE];
GLint hits;
GLint viewport[4];
if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN)
return;
glGetIntegerv (GL_VIEWPORT, viewport);
glSelectBuffer (BUFSIZE, selectBuf);
(void) glRenderMode (GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode (GL_PROJECTION);
glPushMatrix ();
glLoadIdentity ();
gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y), 0.1, 0.1, viewport);
gluOrtho2D(0.0, 5.0, 0.0, 10.0);
DrawButton1(GL_SELECT);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glFlush();
hits=glRenderMode(GL_RENDER);
processHits1(hits, selectBuf);
glutPostRedisplay();
}
void display1(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
DrawButton1(GL_RENDER);
glLineWidth(1);
glPushMatrix();
glTranslatef(2.5f, 8.0f, 0.0f);
glColor3f(1.0f, 1.0f, 0.0f);
glScalef(0.006f, 0.006f, 0.006f);
draw_string(GLUT_STROKE_ROMAN, koord);
glPopMatrix();
glPushMatrix();
glTranslatef(2.0f, 8.2f, 0.0f);
glScalef(0.003f, 0.003f, 0.003f);
draw_string(GLUT_STROKE_ROMAN, plus);
glPopMatrix();
glutSwapBuffers();
glFlush();
}
void reshape1(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 5.0, 0.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();