galera aqui tá um bom exemplo de uma roda que vai pra frent e para traz bom pra estudos.. pra rodar vc precisa da bibliotec OpenGl
"A biblioteca GLUT é responsável pela criação janelas e o tratamento de seus eventos de forma independente do sistema operacional utilizado. Para instalar a GLUT, siga os passos:
Descompacte o arquivo glut.h no diretório /include/GL do Dev-C++;
Descompacte o arquivo libglut.a e libglut32.a no diretório /lib do Dev-C++;
Descompacte o arquivo glut32.dll no diretório windows/system.
"
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
depois abra o Dev c++ new projeto > empty project
depois new souce file
depois menu projeto> opção de projeto/ parametro/linker ( digite dentro o nome das biblio..)
-lopengl32
-lglut32
-lgut32
#include <windows.h>
#include <stdio.h>
#include <glut.h>
#include <stdlib.h>
#include<math.h>
float ang=0, sentido=0, s=-1, rolah=0.03, rolav=0, x=-17.5, vel=0.03, z=1.65;
void inicializa()
{
glClearColor(0.0,0.0,0,0.0); // define a cor da Janela
glOrtho(-20,20,-1,25,-2,20); // define em quantas unidades a janela será dividida
glEnable(GL_DEPTH_TEST); // habilita o Buffer Z - para usar 3D
}
void teclado(unsigned char tecla, int a, int b) //// FUNÇÕES DO TECLADO
{
switch(tecla)
{
case 27: // <ESC> para terminar
exit(0);
break;
}
}
void gira()
{
ang+=s;
if (ang>=360)
{
ang=0; // para não gerar overflow
}
x+=rolah; z+=rolav;
if (sentido==0 && x>=-15.6)
{ rolah=0; rolav=vel;
}
if (sentido==0 && z>=3.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=-12.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=5.6)
{ rolav=0;
rolah=vel; }
if(sentido==0 && x>=-9.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=7.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=-6.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=9.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=-3.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=11.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=2.45)
{rolah=+0.036; rolav=-vel; }
if (sentido==0 && x>=14.4)
{ rolav=0; rolah=vel; }
if (sentido==0 && x>=16.4)
{ rolav=0; rolah=0; sentido=1; rolah=vel * (-1);}
if (sentido==1 && x>=16.4)
{ rolav=0; rolah=vel *(-1); s=1;}
if (sentido==1 && x<=14.5)
{ rolav=+0.025; rolah=-vel;}
if (sentido==1 && x<=2.5)
{ rolav=0; rolah=vel *(-1);}
if (sentido==1 && x<=-3.6)
{ rolah=vel *(-1); z=9.6; }
if (sentido==1 && x<=-6.6)
{ rolah=vel *(-1); z=7.6;}
if (sentido==1 && x<=-9.6)
{ rolah=vel *(-1); z=5.6;}
if (sentido==1 && x<=-12.6)
{ rolah=vel *(-1); z=3.6;}
if (sentido==1 && x<=-15.6)
{ rolah=vel *(-1); z=1.65;}
if (sentido==1 && x<=-17.35)
{ rolah=vel *(1); z=1.65; sentido=0;s=-1;}
}
void desenha() // FUNÇÃO QUE DESENHA E APRESENTA NA TELA
{
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); // Neste ponto inicia-se o desenho de figuras que não vão girar
//vertices();
glLineWidth(4);
glBegin(GL_LINE_STRIP); // D E S E N H O D A E S C A D A
glColor3f(1,1,1); // indica a cor do objeto que irá ser desenhado a seguir
glVertex2f(-20,0.25);
glVertex2f(-14,0.25); glVertex2f(-14,2.25);
glVertex2f(-11,2.25); glVertex2f(-11,4.25);
glVertex2f(-8,4.25); glVertex2f(-8,6.25);
glVertex2f(-5,6.25); glVertex2f(-5,8.25);
glVertex2f(-2,8.25); glVertex2f(-2,10.25);
glVertex2f(2,10.25);
glVertex2f(14,0.25); glVertex2f(18,0.25);
glVertex2f(18,2);
glEnd();
////////////////////////////////////////// casinha
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex2f(-2,13);
glVertex2f(-2,10);
glEnd();
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex2f(-2,13);
glVertex2f(-0,16);
glEnd();
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex3f(2,13,1);
glVertex3f(2,10.25,1);
glEnd();
//////////////////////////////////////////
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex3f(2,13,1);
glVertex3f(0,16,1);
glEnd();
//------------------------------------------------------------------------------
glPushMatrix(); // Segura a matriz anterior
glColor3f(1.0,0,0);
glTranslatef(x,z,0);
glBegin(GL_LINES);
glVertex2f(-0,0);
glVertex2f(-0,3);
glEnd();
glBegin(GL_LINES);
glVertex2f(2,3);
glVertex2f(-2,3);
glEnd();
glColor3f(1.0,1.0,1.0);
glRotatef(ang,0,0,1);
glLineWidth(5);
glColor3f(0,0,1.0);
glutWireTorus(0.25,1.0,5,25);
glColor3f(1.0,1.0,1.0);
glutWireTorus(0.25,0.5,2.5,12.5);
glPopMatrix(); // Termina o desenho de figuras que se deseja girar e organiza os dados na matriz de rotação
glutSwapBuffers(); // avisa que não ha nada mais para ser desenhado
glutPostRedisplay(); // Desmancha o desenho e o redesenha (simula o movimento)
}
//------------------------------------------------------------------------------
int main(int argc,char **argv) {
glutInit(&argc, argv);
glutInitWindowSize(1000,700); // tamanho da janela, em pixels
glutInitWindowPosition(0,0); // indica a posição do canto superior direito, em pixels, da janela
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Toroíde ");
glutDisplayFunc(desenha);
glutKeyboardFunc(teclado);
glutIdleFunc(gira);
inicializa();
glutMainLoop();
return 0;
}
"A biblioteca GLUT é responsável pela criação janelas e o tratamento de seus eventos de forma independente do sistema operacional utilizado. Para instalar a GLUT, siga os passos:
Descompacte o arquivo glut.h no diretório /include/GL do Dev-C++;
Descompacte o arquivo libglut.a e libglut32.a no diretório /lib do Dev-C++;
Descompacte o arquivo glut32.dll no diretório windows/system.
"
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
depois abra o Dev c++ new projeto > empty project
depois new souce file
depois menu projeto> opção de projeto/ parametro/linker ( digite dentro o nome das biblio..)
-lopengl32
-lglut32
-lgut32
#include <windows.h>
#include <stdio.h>
#include <glut.h>
#include <stdlib.h>
#include<math.h>
float ang=0, sentido=0, s=-1, rolah=0.03, rolav=0, x=-17.5, vel=0.03, z=1.65;
void inicializa()
{
glClearColor(0.0,0.0,0,0.0); // define a cor da Janela
glOrtho(-20,20,-1,25,-2,20); // define em quantas unidades a janela será dividida
glEnable(GL_DEPTH_TEST); // habilita o Buffer Z - para usar 3D
}
void teclado(unsigned char tecla, int a, int b) //// FUNÇÕES DO TECLADO
{
switch(tecla)
{
case 27: // <ESC> para terminar
exit(0);
break;
}
}
void gira()
{
ang+=s;
if (ang>=360)
{
ang=0; // para não gerar overflow
}
x+=rolah; z+=rolav;
if (sentido==0 && x>=-15.6)
{ rolah=0; rolav=vel;
}
if (sentido==0 && z>=3.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=-12.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=5.6)
{ rolav=0;
rolah=vel; }
if(sentido==0 && x>=-9.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=7.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=-6.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=9.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=-3.6)
{ rolah=0; rolav=vel; }
if (sentido==0 && z>=11.6)
{ rolav=0; rolah=vel; }
if(sentido==0 && x>=2.45)
{rolah=+0.036; rolav=-vel; }
if (sentido==0 && x>=14.4)
{ rolav=0; rolah=vel; }
if (sentido==0 && x>=16.4)
{ rolav=0; rolah=0; sentido=1; rolah=vel * (-1);}
if (sentido==1 && x>=16.4)
{ rolav=0; rolah=vel *(-1); s=1;}
if (sentido==1 && x<=14.5)
{ rolav=+0.025; rolah=-vel;}
if (sentido==1 && x<=2.5)
{ rolav=0; rolah=vel *(-1);}
if (sentido==1 && x<=-3.6)
{ rolah=vel *(-1); z=9.6; }
if (sentido==1 && x<=-6.6)
{ rolah=vel *(-1); z=7.6;}
if (sentido==1 && x<=-9.6)
{ rolah=vel *(-1); z=5.6;}
if (sentido==1 && x<=-12.6)
{ rolah=vel *(-1); z=3.6;}
if (sentido==1 && x<=-15.6)
{ rolah=vel *(-1); z=1.65;}
if (sentido==1 && x<=-17.35)
{ rolah=vel *(1); z=1.65; sentido=0;s=-1;}
}
void desenha() // FUNÇÃO QUE DESENHA E APRESENTA NA TELA
{
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); // Neste ponto inicia-se o desenho de figuras que não vão girar
//vertices();
glLineWidth(4);
glBegin(GL_LINE_STRIP); // D E S E N H O D A E S C A D A
glColor3f(1,1,1); // indica a cor do objeto que irá ser desenhado a seguir
glVertex2f(-20,0.25);
glVertex2f(-14,0.25); glVertex2f(-14,2.25);
glVertex2f(-11,2.25); glVertex2f(-11,4.25);
glVertex2f(-8,4.25); glVertex2f(-8,6.25);
glVertex2f(-5,6.25); glVertex2f(-5,8.25);
glVertex2f(-2,8.25); glVertex2f(-2,10.25);
glVertex2f(2,10.25);
glVertex2f(14,0.25); glVertex2f(18,0.25);
glVertex2f(18,2);
glEnd();
////////////////////////////////////////// casinha
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex2f(-2,13);
glVertex2f(-2,10);
glEnd();
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex2f(-2,13);
glVertex2f(-0,16);
glEnd();
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex3f(2,13,1);
glVertex3f(2,10.25,1);
glEnd();
//////////////////////////////////////////
glBegin(GL_LINES);
glColor3f(255,255,0);
glVertex3f(2,13,1);
glVertex3f(0,16,1);
glEnd();
//------------------------------------------------------------------------------
glPushMatrix(); // Segura a matriz anterior
glColor3f(1.0,0,0);
glTranslatef(x,z,0);
glBegin(GL_LINES);
glVertex2f(-0,0);
glVertex2f(-0,3);
glEnd();
glBegin(GL_LINES);
glVertex2f(2,3);
glVertex2f(-2,3);
glEnd();
glColor3f(1.0,1.0,1.0);
glRotatef(ang,0,0,1);
glLineWidth(5);
glColor3f(0,0,1.0);
glutWireTorus(0.25,1.0,5,25);
glColor3f(1.0,1.0,1.0);
glutWireTorus(0.25,0.5,2.5,12.5);
glPopMatrix(); // Termina o desenho de figuras que se deseja girar e organiza os dados na matriz de rotação
glutSwapBuffers(); // avisa que não ha nada mais para ser desenhado
glutPostRedisplay(); // Desmancha o desenho e o redesenha (simula o movimento)
}
//------------------------------------------------------------------------------
int main(int argc,char **argv) {
glutInit(&argc, argv);
glutInitWindowSize(1000,700); // tamanho da janela, em pixels
glutInitWindowPosition(0,0); // indica a posição do canto superior direito, em pixels, da janela
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Toroíde ");
glutDisplayFunc(desenha);
glutKeyboardFunc(teclado);
glutIdleFunc(gira);
inicializa();
glutMainLoop();
return 0;
}