PDA

View Full Version : [OpenGl] Problema a modificare colore linea


miky7
22-02-2011, 19:32
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();
}

miky7
23-02-2011, 22:47
C'è nessuno che riesce a darmi qualche consiglio??

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.