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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Transformaciones geometricas en open gl
« en: 16 Septiembre 2012, 06:02 am »

Hola!
Es que necesito de su ayuda, tengo un código que me permite girar la figura con un menú, pero lo que pasa es que tiene que Rotar, escalar y Trasladar;
Como hago para que rote pero en su mismo lugar, por que esta me aparece en la esquina de la pantalla y en la escala se me deforma totalmente
Agradezco su ayuda

CÓDIGO: #include <iostream>
#include <GL/glut.h>
#include <stdlib.h>
using namespace std;

int click[2] = {0,0};
void menuaplicacion(int);


void operaciones (float p[2], float p1[2]) //Parámetros de Entrada
{
   float R[3][3]={1,0,0,  0,1,0,  0,0,1};
   p1[0]= R[0][0]*p[0]+ R[0][1]*p[1] + R[0][2]*1;
   p1[1]= R[1][0]*p[0]+ R [1][1]*p[1] + R[1][2]*1;
   return;
}

//Para rotar
        float q0[2]={click
  • , click [1]};
       float q1[2]={click
  • +100, click [1]};
      float q2[2]={click
  • +100, click [1]+100};
      float q3[2]={click
  • +50, click [1]+150};
      float q4[2]={click
  • , click [1]+100};
      


      float b0[2] ,b1[2] ,b2[2],b3[2],b4[2],b5[2], r[2];
      float ang;



void rotacion2D (float p[2], float p1[2], float ang)
{
   float R[3][3]={0,0,0,  0,1,0,  0,0,1};
   float theta;

   theta=ang*3.1415/180;


   R[0][0]=cos(theta);
   R[0][1]=-sin(theta);
   R[1][0]=sin(theta);
   R[1][1]=cos(theta);

   p1[0]= R[0][0]*p[0]+ R
  • [1]*p[1] + R[0][2]*1;
   p1[1]= R[1][0]*p[0]+ R [1][1]*p[1] + R[1][2]*1;

   
   return;
}

// Para Traslacion

/*void traslacion2D (float p[2], float p1[2], float s[2])
{
   float T[3][3]={0,0,0,  0,1,0,  0,0,1};

   T[0][1]=t[0]; //s[0] es tx
   T[1][0]=t[1]; //s[1] es ty

   p1[0]= T[0][0]*p[0]+ T
  • [1]*p[1] + T[0][2]*1;
   p1[1]= T[1][0]*p[0]+ T [1][1]*p[1] + T[1][2]*1;

   float b0[2] ,b1[2] ,b2[2],b3[2],b4[2],b5[2], t[2];
   return;

}
*/

//Para Escalado

      float  s[2];


void escalado2D (float p[2], float p1[2], float s[2])
{
   float S[3][3]={0,0,0,  0,1,0,  0,0,1};

   S[0][0]=s[0]; //s[0] es sx
   S[1][1]=s[1]; //s[1] es sy

   p1[0]= S[0][0]*p[0]+ S
  • [1]*p[1] + S[0][2]*1;
   p1[1]= S[1][0]*p[0]+ S [1][1]*p[1] + S[1][2]*1;

   
   return;
}
//********************************************EMPIEZA FORMALMENTE EL TRABAJO ****************************************************************

void init(void)
{
    glClearColor(0.0,0.0,0.0,0.0);
     glMatrixMode(GL_PROJECTION);   
     gluOrtho2D(0.0,500.0,0.0,500.0);
   
    int submenu1,submenu2,submenu3,submenu4;
   

    submenu1=glutCreateMenu(menuaplicacion);
      glutAddMenuEntry("45", 1);
      glutAddMenuEntry("-45", 2);
   
   
    submenu2=glutCreateMenu(menuaplicacion);
      glutAddMenuEntry("Doble", 3);
      glutAddMenuEntry("Mitad", 4);
    

     submenu3=glutCreateMenu(menuaplicacion);
      glutAddMenuEntry("Al Origen", 5);
      glutAddMenuEntry("Posicion Inicial", 6);
   

     submenu4=glutCreateMenu(menuaplicacion);
      glutAddMenuEntry("Retornar Posicion Inicial", 7);
      glutAddMenuEntry("Desde 0", 8);
      

    glutCreateMenu(menuaplicacion);
    glutAddSubMenu("Rotar",submenu1);
   glutAddSubMenu("Escalar",submenu2);
   glutAddSubMenu("Trasladar",submenu3);
   glutAddSubMenu("Reiniciar",submenu4);
   glutAttachMenu(GLUT_RIGHT_BUTTON);
   glutAttachMenu(GLUT_MIDDLE_BUTTON);

}


void ejesguia()
{

    glClear(GL_COLOR_BUFFER_BIT);
     
    glColor3f(0.0,1.0,0.0);
    glBegin(GL_LINES);
    glPointSize(0.8);
         glVertex2i(30,30);     
         glVertex2i(30,470);
         
         glVertex2i(30,30);     
            glVertex2i(470,30);

     glEnd();
     glFlush();
}


void mouse(int button, int state, int x=0, int y=0)
{

   if (state==0) return;
     y =500-y;

   if (state == 1 && click[0]==0 && click[1]==0)
   {
      click
  • =x;
      click [1]=y;
   }

      cout<<"Coordenada en X guardada"<<click[0]<<endl;
       cout<<"Coordenada en Y guardada"<<click[1]<<endl;

      glColor3f (0.73, 0.25, 0.83);
      glBegin (GL_POLYGON);

      glVertex2f(click
  • , click [1]);
      glVertex2f(click
  • +100, click [1]);
      glVertex2f(click
  • +100, click [1]+100);
      glVertex2f(click
  • +50, click [1]+150);
      glVertex2f(click
  • , click [1]+100);

      glEnd ();
      glFlush();
}

void menuaplicacion(int value)
{
   if(value==1)
   {
   // Rota mas 45

   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);
      ang= 45;
   
   rotacion2D(q0,b0,ang);
   rotacion2D(q1,b1,ang);
   rotacion2D(q2,b2,ang);
   rotacion2D(q3,b3,ang);
   rotacion2D(q4,b4,ang);
   
   
   glColor3f(0.50,0.21,0.42);
   glBegin(GL_POLYGON);
      glVertex2fv(b0);
      glVertex2fv(b1);
      glVertex2fv(b2);
      glVertex2fv(b3);
      
       
       glEnd();
      glFlush();
      

      

   }


   if(value==2)
   {
   // Rota -45
   
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);

   ang= -45;
   
   rotacion2D(q0,b0,ang);
   rotacion2D(q1,b1,ang);
   rotacion2D(q2,b2,ang);
   rotacion2D(q3,b3,ang);
   rotacion2D(q4,b4,ang);
   
   
   glColor3f(0.50,0.21,0.42);
   glBegin(GL_POLYGON);
      glVertex2fv(b0);
      glVertex2fv(b1);
      glVertex2fv(b2);
      glVertex2fv(b3);
      glVertex2fv(b4);
      glVertex2fv(b5);
       
   glEnd();
      glFlush();
   }

   if(value==3)
   {
   
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);
   s[0]=2;
   s[1]=2;

   escalado2D(q0,b0,s);
   escalado2D(q1,b1,s);
   escalado2D(q2,b2,s);
   escalado2D(q3,b3,s);
   escalado2D(q4,b4,s);


   glColor3f(1,1,0);
   glBegin(GL_POLYGON);
      glVertex2fv(b0);
      glVertex2fv(b1);
      glVertex2fv(b2);
      glVertex2fv(b3);
       
   glEnd();
   glFlush();
   

   }
   if(value==4)
   {
   //   Mitad

   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);

   s[0]=0.5;
   s[1]=0.5;

   escalado2D(q0,b0,s);
   escalado2D(q1,b1,s);
   escalado2D(q2,b2,s);
   escalado2D(q3,b3,s);
   escalado2D(q4,b4,s);
   


   glColor3f(1,1,0);
   glBegin(GL_POLYGON);
      glVertex2fv(b0);
      glVertex2fv(b1);
      glVertex2fv(b2);
      glVertex2fv(b3);
       
   glEnd();
   glFlush();
   
   }

   if(value==5)
   {
   // (0;0)
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);
   }
   if(value==6)
   {
   // (xo,yo)
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);
   
   }

   if(value==7)
   {
   //Posición Inicial
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);
   }

   if(value==8)
   {
   // Desde0
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   ejesguia();
   glutMouseFunc(mouse);
   }

} //  FINMenú

//Main
int main (int argc,char** argv)
{

   int menu, submenu1;

   //iniciacion de GLUT y pantalla
     glutInit(&argc,argv);                     
     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
     glutInitWindowPosition(50,100);                                                   
   
    glutInitWindowSize(500,500);                                                       
     
    glutCreateWindow("Transformaciones");
    glutMouseFunc(mouse);
    glutDisplayFunc (ejesguia);
    glutReshapeWindow (500,500);

    init(); 
    glutMainLoop();
}//Findel Main


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Figuras Geometricas [By Burnhack]
Java
Burnhack 6 8,294 Último mensaje 9 Junio 2013, 22:20 pm
por narcorasta
Transformaciones de binarios tipo double a octal y hexadecimal
Programación General
kattysol7 1 4,213 Último mensaje 8 Mayo 2010, 01:57 am
por h0oke
[Ayuda] Reconocimientos de Figuras Geométricas en imágenes JAVA
Java
alex.mg 2 4,317 Último mensaje 6 Agosto 2013, 05:55 am
por danielo-
Problema: TransformGroup dentro de TransformGroup y transformaciones
Java
MidBifroid 0 1,348 Último mensaje 15 Agosto 2013, 22:47 pm
por MidBifroid
Las mejores transformaciones y armas de DOOM
Noticias
wolfbcn 0 1,033 Último mensaje 24 Marzo 2016, 21:45 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines