Visualizzazione dei risultati da 1 a 10 su 18

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ok adesso che è tutto chiaro sono riuscito a dare un sguardo al tuo codice.
    In effetti c'eri quasi vicina, ma hai fatto alcuni errori.

    Questo è il codice corretto
    codice:
    #define MAXR 1236#define MAXC 103*32676
    
    
    #include <OpenGL/gl.h>
    #include <OpenGL/glu.h>
    #include <GLUT/glut.h>
    #include <iostream>
    #include <fstream>
    
    
    
    
    float mat[MAXR];
    int seq[MAXC];
    int sfondo[32676];
    using namespace std;
    GLfloat t = 4;
    int c = 0;
    
    
    static uint frameCount = 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);
        
        for (int j = 0; j < 728; j=j+12) {
            glBegin(GL_POLYGON);
            uint colorIndex = (frameCount * j) % c;
            int colorValue = seq[colorIndex];
            glColor3f(colorValue, colorValue, colorValue);
            
            for (int i = 1*j; i < 1*j+12; i = i + 2) {
                glVertex2f(mat[i],mat[i + 1]);
            }
            
            glEnd();   //fine poligono
        }
        glutSwapBuffers();
        frameCount++;
    }
    
    
    
    
    void display(void) {
        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)
    {
        
        ifstream exagonData("puntook.txt");
        int r = 0;
        while (!exagonData.eof())
        {
            exagonData >> mat[r];
            r++;
        }
        exagonData.close();
        
        // legge dati sequenza
        
        ifstream blackWhite("dec_pol15.txt");
        
        while (!blackWhite.eof())
        {
            blackWhite >> seq[c];
            c++;
        }
        blackWhite.close();
        
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(1024, 768);
        glutInitWindowPosition(100, 100);
        glutCreateWindow("Pattern 103 esagoni");
        init();
        
        glutDisplayFunc(draw);
        glutReshapeFunc(Resize);
        glutMouseFunc(mouse);
        glutMainLoop();
        
        
    }
    In primis, attenzione quando apri e chiudi i file sul disco, hai fatto confusione con le variabili (chiudi due volte la variabile dati ma in realtà la seconda volta dovrebbe essere datidue. In generale, usa dei nomi più chiari.

    glBegin deve essere usato all'inizio di ogni poligono e non di ogni vertice (per cui va messo fuori dal for in cui l'hai piazzato tu).

    L'algoritmo con cui scegli il colore dell'esagono corrispondente è errato. Rivedi il mio per capire come ho fatto.


    Ed il risultato finale è questo (molto più veloce sul mio MacBook)



    Un saluto!
    Ultima modifica di XWolverineX; 19-12-2015 a 17:03
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Grazie mille! sei stato molto gentile e paziente. Avrei solo un dubbio. Non riesco a capire queste righe:

    unsigned int colorIndex = (frameCount * j) % c;
    int colorValue = seq[colorIndex];
    glColor3f(colorValue, colorValue, colorValue);

    Cioè in che modo vengono letti i valori di 1 e 0 all'interno del file?

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Quote Originariamente inviata da Rosamaria_ Visualizza il messaggio
    Grazie mille! sei stato molto gentile e paziente. Avrei solo un dubbio. Non riesco a capire queste righe:

    unsigned int colorIndex = (frameCount * j) % c;
    int colorValue = seq[colorIndex];
    glColor3f(colorValue, colorValue, colorValue);

    Cioè in che modo vengono letti i valori di 1 e 0 all'interno del file?

    Fondamentalmente l'idea è

    1. Tenere il numero di frame disegnati su schermo usando frameCount e incrementarla dopo ogni rendering. Tale numero viene usato come offset per poi per prendere il colore di ogni esagono.

    L'uso di % c serve fondamentalmente per non andare mai oltre i limiti della matrice creata.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Quote Originariamente inviata da XWolverineX Visualizza il messaggio
    Fondamentalmente l'idea è

    1. Tenere il numero di frame disegnati su schermo usando frameCount e incrementarla dopo ogni rendering. Tale numero viene usato come offset per poi per prendere il colore di ogni esagono.

    L'uso di % c serve fondamentalmente per non andare mai oltre i limiti della matrice creata.
    Scusami ma non riesco a capire se ogni esagono prende una riga differente della matrice per essere acceso oppure se ogni esagono viene acceso con tutti i termini della matrice finchè questa non finisce. Perchè la mia intenzione era di usare ogni singola riga indipendentemente per ogni singolo esagono. Spero di essere stata chiara.

  5. #5
    Inoltre ho notato che l'esagono al centro resta sempre bianco, ma dovrebbe cambiare colore anche quello!

  6. #6
    Quote Originariamente inviata da Rosamaria_ Visualizza il messaggio
    Inoltre ho notato che l'esagono al centro resta sempre bianco, ma dovrebbe cambiare colore anche quello!
    Questo problema l'ho risolto, ho aggiunto j+1, al posto di j, perchè al primo passo leggeva sempre zero.

  7. #7
    Ho provato pure io questo simpatico programma, ma mi da errore "redeclaration of c++ built-in type 'wchar_t'"

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.