读书人

关于OpenGL的一个有关问题

发布时间: 2012-03-09 16:54:57 作者: rapoo

关于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();} 

读书人网 >C++

热点推荐