关于OpenGL的一个问题
一个三角形,取每条边的中点画个三角形,如此继续,代码如下,是哪里出了问题
- C/C++ code
#include <gl/glut.h>void triangle(GLfloat *a, GLfloat *b, GLfloat *c){ glPolygonMode(GL_FRONT, GL_LINE); glBegin(GL_TRIANGLES); glVertex2fv(a); glVertex2fv(b); glVertex2fv(c); glEnd();}GLfloat v[3][2] = {{-0.5, -0.5}, {0.0, 0.5}, {0.5, -0.5}};void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int m){ int j; if (m > 0) { for (j = 0; j < 2; j++) v[0][j] = (a[j] + b[j]) / 2; for (j = 0; j < 2; j++) v[1][j] = (a[j] + c[j]) / 2; for (j = 0; j < 2; j++) v[2][j] = (c[j] + b[j]) / 2; //triangle(v[0], v[1], v[2]); divide_triangle(a, v[0], v[1], m - 1); divide_triangle(v[0], b, v[2], m - 1); divide_triangle(v[1], v[2], c, m - 1); divide_triangle(v[0], v[1], v[2], m - 1); } else triangle(a, b, c);}void display(void){ glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT, GL_LINE); divide_triangle(v[0], v[1], v[2], 1);// triangle(v[0], v[1], v[2]); glFlush();}int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowSize(400, 400); glutInitWindowPosition(200, 200); glutCreateWindow("OpenGL"); glutDisplayFunc(&display); glutMainLoop();}
[解决办法]
楼主的代码会运行出黑色背景吧,
把display函数改为这样:
- C/C++ code
void display(void){ glClearColor(1.0,1.0,1.0,0.0); glColor3f(0.0f,0.0f,0.0f); glPointSize(4.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,640.0,0.0,480.0); glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT, GL_LINE); //divide_triangle(v[0], v[1], v[2], 1); triangle(v[0], v[1], v[2]); glFlush();}