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:
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.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
Questo è il codice che ho scritto:
Qualcuno saprebbe aiutarmi?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(); }

Rispondi quotando