Para un ramo de la universidad me pidieron aplicar algunas cosillas de Opengl, dentro de lo que aparecia Rubberband.
La tarea consiste en que cuando se pase el mouse por una ventana que el programa creara y se de click sobre ella, exista la posibilidad de dibujar un rectangulo.
Llevo gran parte de ella echa pero no encuentro el error, de por que no genera los rectangulitos malditos, y ya mi neurona se estreso. Les dejo el codigo y espero vuestros comentarios.
Salu2!
Código:
p.d: Sry me quedo un poco largo :P #include <stdio.h> #include <stdlib.h> #include <GL/glut.h> int h=449, w=645, size, valor; /*Medidas de la ventana*/ int moving=0; void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_COLOR_LOGIC_OP); glLogicOp(GL_COPY); } /*Funcion Callback: Dibujara un cuadrado cuando el mouse de click*/ void drawSquare(int x, int y) { y=h-y; glColor3f(1.0,0.0,1.0); if(moving) { size=(h-valor-y)/2; glBegin(GL_POLYGON); glVertex2i(x+size, y+size); glVertex2i(x-size, y+size); glVertex2i(x-size, y-size); glVertex2i(x+size, y-size); glEnd(); glLogicOp(GL_XOR); glColor3f(1.0,1.0,1.0); glFlush(); } } /*Funcion Callback: Genera la ventana donde se haran los dibujos*/ void generaWin() { glClear(GL_COLOR_BUFFER_BIT); /*Limpia la pantalla*/ glBegin(GL_POLYGON); /*Dibuja un poligono, triangulo especificamente.*/ glColor3f(1.0,0.0,0.0); glVertex2f(0.2,0.2); glColor3f(0.0,1.0,0.0); glVertex2f(0.8,0.2); glColor3f(0.0,0.0,1.0); glVertex2f(0.48,0.9); glColor3f(1.0,1.0,1.0); glEnd(); glLogicOp(GL_XOR); glFlush(); } /*Funcion Callback: Permite reescalar la figura si se reescala la ventana */ void reshape(int w, int h) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D (0.0, 1.0, 0.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } /*Funcion Callback: Uso del mouse sobre ventana*/ void mouse(int btn, int state, int x, int y) { if(btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { if(moving==0) valor=y; moving = 1; drawSquare(x,y); } if(btn == GLUT_LEFT_BUTTON && state == GLUT_UP) moving=0; } /*Funcion Callback: Permite usar el teclado en el programa*/ void keyboard(unsigned char key, int x, int y) { if(key==27) exit(0); } int main(int argc, char **argv) { glutInit(&argc, argv); /*Negocia con el gestor de ventanas*/ glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /*Modo de dibujo de la ventana* glutInitWindowSize(645,449); /*Taman~o de la ventana*/ glutInitWindowPosition(0,0); /*Posicion de la ventana en la pantalla glutCreateWindow("Dibujando"); /*Nombre de la ventana*/ glutDisplayFunc(generaWin); /*Callback de Dysplay*/ glutReshapeFunc(reshape); /*Funcion para el re-size de una ventana, manti glutMouseFunc(mouse); /*Funcion del Mouse*/ glutKeyboardFunc(keyboard); /*Funcion para el teclado*/ glutPassiveMotionFunc(drawSquare); init(); /*Funcion que me inicializa parametros de la ventana*/ glutMainLoop(); /*Loop de eventos de aplicacion */ return 0; }