多边形的扫描转换与区域填充算法
为了完成这次算法作业, 需要C++ 图形编程. 我选择了OpenGL. 配置起来有点麻烦, 又遇到了一些Bug, 最后索性用了GL里面的一个库, glut.h 进行尝试.
GLUT的学习
用的Clion, 配置了库, 但是可能有问题, 至少Glut是能正常使用的
随便找的一篇博客配置OpenGL
随便找到的一篇GLUT Tutorial
捣腾半天发现其实我需要的功能并不是很复杂, 也没用到太多glut.h更深入的东西. 了解了glut基本的结构以后还是比较容易看懂整体的流程的.
1 2 3 4 5 6 7 8 9 10 11 12 13
| glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(winX, winY); glutCreateWindow("test"); myInit();
glutDisplayFunc(display);
glutMouseFunc(processMouse); glutKeyboardFunc(processKeyboard);
glutMainLoop();
|
1 2 3 4 5 6 7 8 9 10
| glClearColor(255.0, 255.0, 255.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0, 0.0, 0.0);
glPointSize(2.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, winX, 0, winY);
glFlush();
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| void drawLine(int x1, int y1, int x2, int y2) { glVertex2i(x1, y1); glVertex2i(x2, y2); } void processKeyboard(unsigned char key, int _x, int _y) { if(key == 27) exit(0); else { if(n >= 3) { Filling f = Filling(n, x, y); glBegin(GL_LINES); f.fill(drawLine); glEnd(); glFlush(); } } } void processMouse(int button, int state, int _x, int _y) { if(state == GLUT_DOWN) { x[n] = _x; y[n++] = winY - _y; glBegin(GL_POINTS); for(int i = 0; i < n; i++) { glVertex2i(x[i], y[i]); } glEnd(); glFlush(); } } void display() { glClear(GL_COLOR_BUFFER_BIT); glClearColor(255.0, 255.0, 255.0, 0.0); glColor3f(0.0, 0.0, 0.0);
glBegin(GL_POINTS); for(int i = 0; i < n; i++) { glVertex2i(x[i], y[i]); } glEnd(); glFlush(); }
|
to be continue...
算法代码之后再说....
Comments