Hola estoy intentando realizar un programita en opengl: el programa se basa en girar un objeto sobre si mismo o sobre uno de sus vertices. si alguien puede ayudarme por favor, es que soy nuevo en este lenguaje y ando algo perdido aki dejo el codigo:
//Archivos de cabecera
#include "stdafx.h"
#include <gl\glut.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <math.h>
//Constates y tipos de datos
#define PI 3.1415926535897
#define MAX 60
#define rt 100
#define rx 200
#define ry 200
typedef float tipo_punto[2];
typedef tipo_punto tipo_vector_puntos[MAX];
//Prototipos de funciones
void inicializar();
void representarEscena();
void cambiarTamano(int ancho, int alto);
void funcionDesocupada(void);
void dibujar_circulo_unidad(void);
void dibujar_triangulo_unidad(void);
//Variables externas
GLfloat xmin=-400; // volumen de visualización
GLfloat xmax=400;
GLfloat ymin=-400;
GLfloat ymax=400;
GLfloat dia=0.10;
float inc=0.05;
int main(int argc, char **argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(500,500);
glutCreateWindow("Rotacion de poligonos");
inicializar();
glutDisplayFunc(representarEscena); //Representacion de la escena
glutIdleFunc(funcionDesocupada); //Animacion
glutReshapeFunc(cambiarTamano);
glutMainLoop();
return 0;
}
void inicializar(void){
glClearColor(1.0,1.0,1.0,1.0);
}
void representarEscena(void){
float x,y,d;
float alfa;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,0.0,0.0);
glMatrixMode(GL_MODELVIEW);
//dibujar objeto
glColor3f(0.0,0.0,1.0);
alfa=2*dia*PI/100;
x=cos(alfa);
y=sin(alfa);
glPushMatrix();
glRotatef(alfa,x,y,0);
glTranslatef(x,y,0.0);
glPushMatrix();
glScalef(rt,rt,1);
dibujar_triangulo_unidad();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void cambiarTamano(int ancho, int alto){
float aspecto1,aspecto2;
if (alto==0)
alto=1;
glViewport(0,0,ancho,alto);
aspecto1=(xmax-xmin)/(ymax-ymin);
aspecto2=(float)ancho/alto;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (aspecto2<=aspecto1)
gluOrtho2D(xmin,xmax,ymin*aspecto1/aspecto2,ymax*aspecto1/aspecto2);
else
gluOrtho2D(xmin*aspecto2/aspecto1,xmax*aspecto2/aspecto1,ymin,ymax);
glMatrixMode(GL_MODELVIEW);
}
void funcionDesocupada(void){
dia+=inc;
if (dia>=100)
dia-=100;
representarEscena();
}
void dibujar_triangulo_unidad(void){
tipo_vector_puntos v;
int i;
float angulo;
for (i=0;i<MAX;++i){
angulo=2*PI*i/3;
v[i][0]=cos(angulo);
v[i][1]=sin(angulo);
}
glBegin(GL_POLYGON);
for(i=0;i<MAX;++i){
glVertex2fv(v[i]);
}
glEnd();
}
El fallo esta en que me rota pero me hace una cosa "rara" si alguien me puede ayudar que me responda por favor.