Visualizzazione dei risultati da 1 a 10 su 18

Visualizzazione discussione

  1. #10
    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

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.