Visualizzazione dei risultati da 1 a 10 su 18

Visualizzazione discussione

  1. #1

    [C++] Aiuto animazione in OpenGL

    Ciao a tutti,
    sto usando per la prima volta la libreria opengl con visualStudio 2015. Per la mia tesi devo disegnare una griglia di esagoni deformati in maniera non regolare. Questa l'ho realizzata importando le coordinate dei vertici su un file txt e richiamando questi dati in glBegin(GL_POLYGON). Adesso dovrei fare in modo che questi esagoni si accendono di bianco o di nero, secondo una certa sequenza (salvata anch'essa su un file txt). Ovvero ad ogni frame ogni esagono deve avere un colore nero o bianco (ma non tutti bianchi o tutti neri), ogni esagono è indipendente dall'altro. Ad esempio se ho 5 esagoni, avrò una matrice del genere per il colore di sfondo di ciascuno:
    codice:
    1 0 0 1 1 0 0 0
    1 1 1 0 0 1 0 1
    0 1 0 1 1 1 1 0
    0 0 0 0 1 1 0 0
    1 0 1 1 0 0 1 0
    Ovvero al primo frame leggerò la prima colonna, quindi il primo esagono sarà bianco (1), il secondo bianco (1), il terzo nero (0), il quarto nero (0), il quinto bianco (1). Così via per gli altri frame.


    Questo è il codice che ho scritto:
    codice:
    #define MAXR 1236
    #define MAXC 103*32676
    #include <freeglut.h>
    #include <iostream>
    #include <fstream>
    
    
    float mat[MAXR];
    int seq[MAXC];
    int sfondo[32676];
    using namespace std;
    GLfloat t = 4;
    int c = 0;
    
    
    void init(void)
    {
        glClearColor(0.7, 0.7, 0.7, 0.0); // colore sfondo, il quarto parametro indica la trasparenza
        glShadeModel(GL_FLAT);
        glEnable(GL_DEPTH_TEST);
    }
    
    void draw(void)
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glColor3i(seq[c], seq[c], seq[c]);
        //glPolygonMode(GL_FRONT, GL_LINE);
        for (int j = 0; j < 728; j=j+12) {
            for (int i = 1*j; i < 1*j+12; i = i + 2) {
                glBegin(GL_POLYGON);     // Inizio poligono
                
                glVertex2f(1.7*mat[i],1.7*mat[i + 1]);            
            }
               glEnd();   //fine poligono
            
        }
            glutSwapBuffers();
    }
    
    
    void display(void) {
        c = c + 1;
        if (c = 32676) {
            seq[c] = 0.7;
        }
        glutPostRedisplay(); // la finestra corrente deve essere nuovamente visualizzata
        }
    
    void mouse(int button, int state, int x, int y)
    {
        switch (button) {
        case GLUT_LEFT_BUTTON:
            if (state == GLUT_DOWN)  //clic del muose
                glutIdleFunc(display);
            break;
        case GLUT_RIGHT_BUTTON:
            if (state == GLUT_DOWN)
                glutIdleFunc(NULL);
            break;
        default:
            break;
        }
    }
    
    
    void Resize(int iWidth, int iHeight)
    {
        glViewport(0, 0, (GLsizei)iWidth, (GLsizei)iHeight);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-683.0, 683.0, -384.0, 384.0, -1.0, 1.0);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    
    int main(int argc, char** argv)
    {
        // legge dati punti esagoni
        
        ifstream dati("puntook.txt");
        int r = 0;
        while (!dati.eof())
        {
            dati >> mat[r];
            r++;
        }
        dati.close();
    
        // legge dati sequenza
    
        ifstream datidue("dec_pol15.txt");
    
        while (!datidue.eof())
        {
            datidue >> seq[c];
            c++;
        }
        dati.close();
    
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
        glutInitWindowSize(350, 350);
        glutInitWindowPosition(100, 100);
        glutCreateWindow("Pattern 103 esagoni");
        init();
        
        glutDisplayFunc(draw);
        glutReshapeFunc(Resize);
        glutMouseFunc(mouse);
        glutMainLoop();
    
    
    }
    Qualcuno saprebbe aiutarmi?
    Ultima modifica di MItaly; 13-12-2015 a 20:14 Motivo: Tag CODE, linguaggio nel titolo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.