2013-12-02 9 views
0

Следующий код не показывает круг на экране, почему он не работает? Я не вижу никакой ошибки.Круг не отображается на экране

void display(void){ 
    glClear(GL_COLOR_BUFFER_BIT); 

    int circle_points=100; 
    int i; 
    double theta,cx=200, cy=300,r=100; 

    int MyCircle(){ 
     glBegin(GL_LINE_LOOP); 
     glColor3f(1.0,1.0,1.0); //preto 
     for(i=0;i<circle_points;i++){ 
      theta=(2*pi*i)/circle_points; 
      glVertex2f(cx+r*cos(theta),cy+r*sin(theta)); 
     } 
     glEnd(); 
    } 
    glFlush(); 
} 
+0

Вы не должны использовать единый буферном рисунок. В большинстве современных операционных систем с компоновщиками оконных менеджеров это приведет к тому, что на экране ничего не появится. Они только обновляют содержимое окна, когда вы меняете задний буфер на передний план, если вы рисуете непосредственно в переднем буфере, который вы просите о проблемах. Это не обязательно является причиной вашей проблемы, но это то, о чем вы должны знать. Двойная буферизация действительно дешева на современных настольных аппаратных средствах (фреймбуфер - это лишь небольшая часть всего VRAM в эти дни), нет никакой реальной пользы для ***, а не для использования ***. –

+0

Является ли это функцией enfolded (наверняка, похоже)? Он даже звонит откуда угодно? Каковы матрицы проекций и моделей? – keltar

ответ

3

Не знаю, почему вы пытаетесь объявить функцию внутри функции. Я не совсем уверен, как это скомпилировано, тем более бежало.

Логика звук, хотя:

enter image description here

#include <GL/glut.h> 
#include <math.h> 

void MyCircle(void) 
{ 
    const int circle_points=100; 
    const float cx=0, cy=0, r=100; 
    const float pi = 3.14159f; 
    int i = 0; 

    glBegin(GL_LINE_LOOP); 
    glColor3f(1.0,1.0,1.0); //preto 
    for(i=0;i<circle_points;i++) 
    { 
     const float theta=(2*pi*i)/circle_points; 
     glVertex2f(cx+r*cos(theta),cy+r*sin(theta)); 
    } 
    glEnd(); 
} 

void display(void) 
{ 
    const double w = glutGet(GLUT_WINDOW_WIDTH); 
    const double h = glutGet(GLUT_WINDOW_HEIGHT); 
    const double ar = w/h; 

    glClear(GL_COLOR_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-150 * ar, 150 * ar, -150, 150, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    MyCircle(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("GLUT"); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 
+0

Это действительно необходимо 2 функции один внутри другого. Снимая функцию MyCircle, появляется кружок \ o/какой позор! Я заметил, что функция MyCircle не была выполнена для того, чтобы ее не вызывали нигде. Спасибо, в любом случае. – elly

Смежные вопросы