|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 6
|
[OpenGl] Problema a modificare colore linea
Salve a tutti, mi sono inoltrato da poco in questo mondo e son quindi alle prime armi..mi trovo un pò in difficoltà con un progettino che devo fare o meglio con una parte di questo.
Il progetto consiste nel disegnare tramite mouse una linea. Tenendo premuto il pulsante sinistro e spostando il mouse viene visualizzata la linea a seconda di dove spostiamo il cursore, poi quando rilasciamo il pulsante questa viene disegnata. Fin qui non ho avuto problemi..il problema è ora, ovvero devo creare un menù che mi permetta di cambiargli colore..ovviamente non ho problemi a creare il menu ma è dopo il problema, ovvero fargli cambiare colore........ #define MAX_LINE 50 #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <STRING.h> #include <math.h> #include <GL/glut.h> typedef struct linea{ int x1,x2,y1,y2; int color; } linea; linea linee[MAX_LINE]; GLfloat colors[6][3]={{1.0, 0.0, 0.0}, {1.0, 1.0, 0.0},{0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, 0.5, 0.0}}; int in_linee = -1; GLsizei wh = 500, ww = 500; /* initial window size */ void mydisplay(){ glViewport(0, 0, wh, ww); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); int i; for(i=0; i<in_linee+1; i++){ glColor3fv(colors[linee[i].color]); glVertex2i(linee[i].x1 , linee[i].y1); glVertex2i(linee[i].x2 , linee[i].y2); } glEnd(); glFlush(); glutSwapBuffers(); } void myMotion(int x, int y){ y = wh-y; linee[in_linee].x2 = x; linee[in_linee].y2 = y; glutPostRedisplay(); } void mymouse(int button, int state, int x, int y){ y = wh-y; if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){ in_linee +=1; linee[in_linee].x1 = x; linee[in_linee].y1 = y; linee[in_linee].color = 0; } if(button == GLUT_LEFT_BUTTON && state == GLUT_UP){ linee[in_linee].x2 = x; linee[in_linee].y2 = y; if(linee[in_linee].x1 == linee[in_linee].x2 && linee[in_linee].y1 == linee[in_linee].y2){ in_linee -= 1; } glutPostRedisplay(); } } void mykey(unsigned char key, int x, int y){ switch(key){ case 26 : in_linee = in_linee-1; if(in_linee <0){ in_linee = -1; } break; } glutPostRedisplay(); } void init(){ // colore nero come sfondo glClearColor (0.0, 0.0, 0.0, 1.0); // Disegna qualunque cosa di bianco glColor3f(1.0, 1.0, 1.0); // Imposta il volume della vista glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluOrtho2D(0, wh, 0, ww); } void demo_menu(int id) { switch (id) { case 1: exit(0); break; case 2: linee[in_linee].color= glColor3fv(colors[linee[i].color]); break; case 3: linee[in_linee].color= glColor3fv(colors[linee[i].color]); break; case 4: linee[in_linee].color = glColor3fv(colors[linee[i].color]); break; case 5: linee[in_linee].color = glColor3fv(colors[linee[i].color]); break; case 6: linee[in_linee].color = glColor3fv(colors[linee[i].color]); break; default: break; } glutPostRedisplay(); } int main(int argc, char** argv){ glutInit(&argc,argv); // Definiamo le proprietà della finestra glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(wh,ww); glutInitWindowPosition(0,0); glutCreateWindow("simple"); glutDisplayFunc(mydisplay); //glutIdleFunc(myidle); glutCreateMenu(demo_menu); glutAddMenuEntry("quit",1); glutAddMenuEntry("Colore Giallo",2); glutAddMenuEntry("Colore Verde",3); glutAddMenuEntry("Colore Blu",4); glutAddMenuEntry("Colore Bianco",5); glutAddMenuEntry("Colore Arancione",6); glutAttachMenu(GLUT_RIGHT_BUTTON); glutMouseFunc(mymouse); glutMotionFunc(myMotion); glutKeyboardFunc(mykey); // Inizializziamo le variabili di stato di OpenGL init(); // Entriamo nel ciclo di rendering glutMainLoop(); } |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 6
|
C'è nessuno che riesce a darmi qualche consiglio??
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:01.



















