# Problema de rotación OpenGL 2D

En el siguiente programa, intento dibujar una casa sencilla. Las coordenadas se definen en la matriz de la casa. Necesito rotar la casa y mostrar tanto la casa rotada como la original. Pero, ¿por qué no se muestra la casa rotada?

``````    //Program to create a house like figure and rotate ir about a given fixed point using OpenGL functions.
#include <glut.h>
#include <stdio.h>

float house [11][2] = {{100,200},{200,250},{300,200},{100,200},{100,100},{175,100},{175,150},{225,150},{225,100},{300,100},{300,200}};

void init()
{
glClearColor(1,1,1,0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,800,0,800);
glMatrixMode(GL_MODELVIEW);
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT);

//NORMAL HOUSE
glColor3f(1,0,0);
glBegin(GL_LINE_LOOP);

for(int i=0;i<11;i++)
glVertex2fv(house[i]);
glEnd();
glFlush();

//ROTATED HOUSE
glPushMatrix();
glRotatef(60,0,1,0);
glColor3f(1,1,0);
glBegin(GL_LINE_LOOP);

for(int i=0;i<11;i++)
glVertex2fv(house[i]);
glEnd();
glFlush();
glPopMatrix();
}

void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800,800);
glutInitWindowPosition(100,100);
glutCreateWindow("House rotation");
init();
glutDisplayFunc(display);
glutMainLoop();
}
``````

preguntado el 10 de mayo de 11 a las 13:05

## 1 Respuestas

Intente girar en el eje Z en lugar del eje Y:

``````//Program to create a house like figure and rotate ir about a given fixed point using OpenGL functions.
#include <GL/glut.h>

float house [11][2] = {{100,200},{200,250},{300,200},{100,200},{100,100},{175,100},{175,150},{225,150},{225,100},{300,100},{300,200}};

void display()
{
glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,800,0,800);

glMatrixMode(GL_MODELVIEW);

//NORMAL HOUSE
glColor3f(1,0,0);
glBegin(GL_LINE_LOOP);
for(int i=0;i<11;i++)
glVertex2fv(house[i]);
glEnd();

//ROTATED HOUSE
glPushMatrix();
glTranslatef(100,100,0);
glRotatef(60,0,0,1);
glTranslatef(-100,-100,0);
glColor3f(1,1,0);
glBegin(GL_LINE_LOOP);
for(int i=0;i<11;i++)
glVertex2fv(house[i]);
glEnd();
glPopMatrix();
}

void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800,800);
glutInitWindowPosition(100,100);
glutCreateWindow("House rotation");
glutDisplayFunc(display);
glutMainLoop();
}
``````

EDITAR: Este debería girar alrededor de la esquina inferior.

contestado el 10 de mayo de 11 a las 22:05

La modificación anterior muestra la salida. Pero no rota la casa sobre su esquina inferior izquierda que está en 100,100. Así que intenté esto: glTranslatef (-100, -100,0); glRotatef (30,0,0,1); glTranslatef (100,100,0); Pero todavía no funciona. ¿Por qué? - footy

@footy: Editado. Parece que esas transformaciones estaban en el orden incorrecto. - genpfault

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.