Вот начал изучать OpenGL , беда в том ,что ниже приведённый код компилируется , но выводиться просто окно , никак нимогу нарисовать прямоугольник и всё связанное с ним тоже ниработает. Может кто подскажет в чём трабла.(работаю в DEV-C++).В идеале должен рисоваться прямоугольник в окне, и с помощью мыши можно изменять его размеры, и курсор меняет вид.
| Код | #include <GL/glui.h> #include <windows.h> #include <stdio.h>
int mx=0; int my=0; int WinHeight=480; int WinWidth=600;
bool b_p1x=false; bool b_p1y=false; bool b_p2x=false; bool b_p2y=false;
int p1x=50; int p2x=50; int p1y=150; int p2y=150;
bool bLeftDown=false;
void SetCursor() { b_p1x=false; b_p1y=false; b_p2x=false; b_p2y=false; if((abs(mx-p1x)<5)&&(abs(my-p1y)<5)) { glutSetCursor(GLUT_CURSOR_BOTTOM_LEFT_CORNER); b_p1x=true; b_p1y=true; return; } if((abs(mx-p1x)<5)&&(abs(my-p2y)<5)) { glutSetCursor(GLUT_CURSOR_TOP_LEFT_CORNER); b_p1x=true; b_p2y=true; return; } if((abs(mx-p2x)<5)&&(abs(my-p2y)<5)) { glutSetCursor(GLUT_CURSOR_TOP_RIGHT_CORNER); b_p2x=true; b_p2y=true; return; } if((abs(mx-p2x)<5)&&(abs(my-p1y)<5)) { glutSetCursor(GLUT_CURSOR_BOTTOM_RIGHT_CORNER); b_p2x=true; b_p1y=true; return; } if((abs(mx-p2x)<5)&&(my>p1y)&&(my<p2y)) { glutSetCursor(GLUT_CURSOR_LEFT_RIGHT); b_p2x=true; return; } if((abs(mx-p1x)<5)&&(my>p1y)&&(my<p2y)) { glutSetCursor(GLUT_CURSOR_LEFT_RIGHT); b_p1x=true; return; } if((abs(my-p1y)<5)&&(mx>p1x)&&(mx<p2x)) { glutSetCursor(GLUT_CURSOR_UP_DOWN); b_p1y=true; return; } if((abs(my-p2y)<5)&&(mx>p1x)&&(mx<p2x)) { glutSetCursor(GLUT_CURSOR_UP_DOWN); b_p2y=true; return; } if((my>p1y)&&(my>p1x)&&(mx>p1x)&&(mx<p2x)) { glutSetCursor(GLUT_CURSOR_SPRAY); b_p2y=true; b_p1y=true; b_p1x=true; b_p2x=true; return; } glutSetCursor(GLUT_CURSOR_INHERIT); }
void Display(){ glClear(GL_COLOR_BUFFER_BIT); glRectf(p1x,p1y,p2x,p2y); glutSwapBuffers(); }
void Keybord(unsigned char key,int x,int y) { switch(key){ case 27: { exit(VK_ESCAPE); break; } } }
void MousePassiveMotion(int x,int y) { mx=x; my=WinHeight-y; SetCursor(); }
void MyMouse(int button,int state,int x,int y) { if((button==GLUT_LEFT_BUTTON)&&(state==GLUT_DOWN)) { mx=x; my=WinHeight-y; bLeftDown=true; SetCursor(); } if((button==GLUT_LEFT_BUTTON)&&(state==GLUT_UP)) { bLeftDown=false; } }
void MouseMotion(int x,int y) { if(bLeftDown) { if(b_p1x)p1x+=x-mx; if(b_p2x)p2x+=x+mx; if(b_p1y)p1y+=WinHeight-my-y; if(b_p2y)p2y+=WinHeight-my-y; mx=x; my=WinHeight-y; glutPostRedisplay(); } } void Reshape(int width,int height) { WinWidth=width; WinHeight=height; glViewport(0,0,WinWidth,WinHeight);
glLoadIdentity(); gluOrtho2D(0,WinWidth-1,0,WinHeight-1); }
int main(int argc,char* argv[]) { glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(WinWidth,WinHeight); glutInitWindowPosition(100,100); glutCreateWindow("My first OpenGL Application"); glClearColor(1,1,0.5,2); glutDisplayFunc(Display); glutKeyboardFunc(Keybord); glutPassiveMotionFunc(MousePassiveMotion); glutMouseFunc(MyMouse); glutMotionFunc(MouseMotion); glutReshapeFunc(Reshape);
glutWarpPointer(WinWidth/2,WinHeight/2); glutMainLoop(); return 0; } |
|