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?