elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  SubMenus en Open gl
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SubMenus en Open gl  (Leído 1,889 veces)
V_Dan

Desconectado Desconectado

Mensajes: 8


Ver Perfil
SubMenus en Open gl
« en: 31 Agosto 2012, 06:06 am »

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
   
}



En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: SubMenus en Open gl
« Respuesta #1 en: 31 Agosto 2012, 06:25 am »

Por lo que veo estas en C++ así que mejor créate alguna clase para dibujar texturas, otra para manipular texto, otra para detectar eventos de entradas (mouse y teclado) otra clase para que sirva de contenedor en 2D y te ordene cada elemento según coordenadas X,Y y de manera opcional una clase que sea para reproducir animaciones (por ejemplo reproducir un hundimiento de un botón al dar click), etc... de esta manera lo que haces estará mas ordenado y podrás crear tantas cosas que te darán riza la facilidad con la que los creas (obviamente deberán estar bien desmenuzado lo que deseas hacer).

Cuando tengas estas clases puedes asociarlas y crear:

-> Menús.
-> Ventanas de dialogo.
-> Etc...

Esto te lo menciono por que en la manera en la que lo estas asiendo es desastrosa a FUTURO y en su dinamismo de modelado posterior.

Dulces Lunas!¡.


« Última modificación: 31 Agosto 2012, 06:28 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Submenus
Desarrollo Web
aldg 0 1,263 Último mensaje 20 Marzo 2011, 23:30 pm
por aldg
[MOD] Turcbo C submenus
Programación C/C++
Angel Zero 6 3,194 Último mensaje 1 Junio 2011, 23:57 pm
por Angel Zero
Open With
Noticias
wolfbcn 0 1,088 Último mensaje 17 Junio 2012, 21:47 pm
por wolfbcn
Menús y submenús en consola C#
.NET (C#, VB.NET, ASP)
Meta 6 6,901 Último mensaje 3 Marzo 2020, 02:15 am
por Meta
Creación de subpáginas y submenús automatizados
Desarrollo Web
2AA2 1 2,469 Último mensaje 29 Agosto 2020, 07:31 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines