• Jueves 2 de Mayo de 2024, 01:50

Autor Tema:  SubMenus en Open gl  (Leído 1223 veces)

Dn_el

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
SubMenus en Open gl
« en: Viernes 31 de Agosto de 2012, 06:18 »
0
Hola!!
Lo que pasa es que estoy haciendo un Menú en Opengl
Debe en una opción reiniciarse, cambiar color de fondo y 3 salir
1.Pero es de un trique y cuando se reinicia no quiero que se borre todo (Mi cuadricula)
entonces no le pondría la de GL_CLEAR
2. No se muy bien manejar los submenus, entonces no se como hacer que cambie el color de fondo
Entonces necesito no se asesoría al respecto, por que cuando le doy reiniciar me termina saliendo color 
Aquí les dejo el Programa, quizá tengan alguna idea   y Agradezco su Ayuda!


#include <iostream>
#include <GL/glut.h>
#include <math.h>
using namespace std;


int matrizDatos[3][3]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
void verificar();
int figura = 0;
void menutriqui(int);




void init(void)
{
     glClearColor(0.0,0.0,0.0,0.0);
     glMatrixMode(GL_PROJECTION);   //establece los parámetros de proyeccion
     gluOrtho2D(0.0,500.0,0.0,500.0);
    figura = 0;
   
    int submenu1;
   

    submenu1=glutCreateMenu(menutriqui);
      glutAddMenuEntry("Un Color", 3);
      glutAddMenuEntry("Otro Color", 4);
      glutAddMenuEntry("Tercer Color", 5);
   

    glutCreateMenu(menutriqui);
    glutAddMenuEntry("Reiniciar",1);
   glutAddSubMenu("Color de Fondo",submenu1);
   glutAddMenuEntry("Salir",2);
    glutAttachMenu(GLUT_RIGHT_BUTTON);

}

   

void lineSegment(void)
{
    glClearColor(1.0f,1.0f,1.0f,1.0f);

     glClear(GL_COLOR_BUFFER_BIT);  //borra la ventana de visualización
     
    glColor3f(0.0,1.0,0.0);        //establece el color del segmento de línea
     
     glBegin(GL_LINES);
            glVertex2i(200,100);     //especifica la geometria del segmento de línea
         glVertex2i(200,400);
         glVertex2i(300,100);     //especifica la geometria del segmento de línea
            glVertex2i(300,400);

         glVertex2i(100,200);     //especifica la geometria del segmento de línea
         glVertex2i(400,200);
         glVertex2i(100,300);     //especifica la geometria del segmento de línea
            glVertex2i(400,300);

     glEnd();
     glFlush();
     
}

void imprimirMatriz()
{
   for(int i=0;i<3;i++)
   {
      for(int j=0; j<3; j++)
      cout<<matrizDatos[j]<<", ";
      cout<<endl;
   }

}

void clic(int button, int state, int x, int y ) // Eventos del Mouse
{
   if(state==GLUT_UP)return;
   
   int col, row;
   
   y = 500 -y;

   if((x>100)&&(x<200))
      col=0;
   else if((x>200)&&(x<300))
      col=1;                                                         
   else if((x>300)&&(x<400))
      col=2;
   else
      return;

   if((y>100)&&(y<200))
      row=0;
   else if((y>200)&&(y<300))
      row=1;
   else if((y>300)&&(y<400))
      row=2;
   else
      return;


   int coordX = 150 + 100*col;
   int coordY = 150 + 100*row;



   if(figura == 0 && matrizDatos[row][col]==-1)
   {
      matrizDatos[row][col]=0;
      glColor3f(0.1f,0.1f,0.1f);
      figura = 1;
      glBegin(GL_LINES);
           glVertex2i(coordX - 40 ,coordY -40);     //especifica la geometria del segmento de línea
         glVertex2i(coordX + 40 ,coordY +40);
   
         glVertex2i(coordX - 40 ,coordY +40);     //especifica la geometria del segmento de línea
          glVertex2i(coordX + 40 ,coordY -40);

     
       glEnd();
      figura=1;

   }
   if (figura == 1 &&matrizDatos[row][col]==-1)
   {
      matrizDatos[row][col]=1;
      glColor3f(0.0f,0.0f,1.0f);
      figura = 0;
      glBegin(GL_LINE_LOOP);
        glVertex2f(coordX - 40 ,coordY -40);
        glVertex2f(coordX + 40 ,coordY -40);
        glVertex2f(coordX ,coordY +40);

        figura=0;
   }
   
   

   glEnd();

   glFlush();
   


   verificar();
   imprimirMatriz();
   

}

void verificar(void)//FUNCION VERIFICAR
{
      if (matrizDatos[0][0]==0 && matrizDatos[1][0]== 0 &&matrizDatos[2][0]==0 ||matrizDatos[0][0]==1 && matrizDatos[1][0]== 1 &&matrizDatos[2][0]==1 )
      {
            glBegin(GL_LINES);
               glColor3f(0.0f,0.0f,1.0f);
               glVertex2i(150,100);   
               glVertex2i(150,400);
            glEnd();
            glFlush();
      figura=3;
      cout<<"GANASTE";
      }
     
      else if (matrizDatos[0][1]==0 &&matrizDatos[1][1]==0 &&matrizDatos[2][1]==0 || matrizDatos[0][1]==1 &&matrizDatos[1][1]==1 &&matrizDatos[2][1]==1)
      {
         glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(250,100);   
            glVertex2i(250,400);
         glEnd();
         glFlush();
         figura=3;
         cout<<"GANASTE";
      }

      else if (matrizDatos[0][2]==0 &&matrizDatos[1][2]==0 &&matrizDatos[2][2]==0 || matrizDatos[0][2]==1 &&matrizDatos[1][2]==1 &&matrizDatos[2][2]==1)
      {
         glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(350,100);   
            glVertex2i(350,400);
         glEnd();
         glFlush();
         figura=3;
         cout<<"GANASTE";
      }

      else if (matrizDatos[0][0]==0 &&matrizDatos[0][1]==0 &&matrizDatos[0][2]==0 || matrizDatos[0][0]==1 &&matrizDatos[0][1]==1 &&matrizDatos[0][2]==1)
      {
         glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(100,150);   
            glVertex2i(400,150);
         glEnd();
         glFlush();
         figura=3;
         cout<<"GANASTE";
      }
     
     
      else if (matrizDatos[1][0]==0 &&matrizDatos[1][1]==0 &&matrizDatos[1][2]==0   || matrizDatos[1][0]==1 &&matrizDatos[1][1]==1 &&matrizDatos[1][2]==1)
      {
         glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(100,250);   
            glVertex2i(400,250);
         glEnd();
         glFlush();
         figura=3;
         cout<<"GANASTE";
      }


      else if (matrizDatos[2][0]==0 &&matrizDatos[2][1]==0 &&matrizDatos[2][2]==0 || matrizDatos[2][0]==1 &&matrizDatos[2][1]==1 &&matrizDatos[2][2]==1)
      {
         glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(100,350);   
            glVertex2i(400,350);
         glEnd();
         glFlush();
         figura=3;
         cout<<"GANASTE";
      }

      else if(matrizDatos[0][0]==0 &&matrizDatos[1][1]==0 &&matrizDatos[2][2]==0 || matrizDatos[0][0]==1 &&matrizDatos[1][1]==1 &&matrizDatos[2][2]==1)//verificar diagonal 1
      {
         glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(100,100);   
            glVertex2i(400,400);
         glEnd();
         glFlush();
      figura=3;
      cout<<"GANASTE";
      }

      else if(matrizDatos[0][2]==0 && matrizDatos[1][1]==0 && matrizDatos[2][0]==0 || matrizDatos[0][2]==1 &&matrizDatos[1][1]==1 &&matrizDatos[2][0]==1)//verificar diagonal 2
      {
      glBegin(GL_LINES);
            glColor3f(0.0f,0.0f,1.0f);
            glVertex2i(400,100);   
            glVertex2i(100,400);
         glEnd();
         glFlush();
         figura=3;
         cout<<"GANASTE";
      }

   
   
}

void menutriqui(int value) // Menutriqui
{
    if(value==1)  glutPostRedisplay;
    if(value==2)  exit(0);
   if(value==3)  glClearColor(1.0f,1.0f,1.0f,1.0f );
   if(value==4)  glClearColor(1.0f,0.0f,1.0f,0.0f );
   if(value==5)  glClearColor(0.0f,1.0f,0.0f,1.0f );
}   


int main (int argc,char** argv)
{
     glutInit(&argc,argv);                      //Inicializa GLUT
     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //establece el modo de visualizacion
     glutInitWindowPosition(50,100);           //establece la posicion de la esquina superior
                                               //izquierda de la ventana de visualizacion
     glutInitWindowSize(500,500);              //establece el ancho y la altura de la ventana
                                               //de visualizacion
     glutCreateWindow("Triqui"); //crea la ventana de visualizacion
     init();                                   //ejecuta el procedimiento de inicializacion
    glutMouseFunc(clic);
     glutDisplayFunc(lineSegment);//envia los graficos a la ventana de visualizacion
    glutMainLoop();                           //muestra todo y espera
   
} :lightsabre: