Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Toroide com OpenGL

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C# / C++ Toroide com OpenGL

    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;
    }


X
Working...
X