Opengl c необходимо отобразить разноцветный квадрат, но мой код показывает пустой экран

#c #xcode #opengl

#c #xcode #opengl

Вопрос:

Я изучаю Opengl на c . Я пытаюсь отобразить многоцветный квадрат, но сначала я хочу отобразить простой квадрат. Но все напрасно, он показывает пустой экран. Я пробую это на xcode, мой код

 #include <iostream>
#include <GLUT/GLUT.h>
#include<OpenGL/OpenGL.h>
void init(void)
{
glShadeModel( GL_SMOOTH ); 
glClearColor( 1.0, 1.0, 1.0, 1.0 ); 
glEnable( GL_COLOR_MATERIAL );
glEnable( GL_BLEND );  
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
void coloredSquare(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
glBegin ( GL_LINES );
glColor3f ( 0.9,0.9,0.9 );     // very light gray
for(int i=10;i<180;i =10)  // vertical lines
{
    glVertex2f( i,0 );
    glVertex2f( i,180 );
}

for(int j=10;j<180;j =10)   // horizontal lines
{
    glVertex2f( 0,j );
    glVertex2f( 180,j );
}
glEnd();

// b. points
glPointSize(3.0);   // 3 pixel point. why it only works outside of glBegin-glEnd.
glBegin ( GL_POINTS );
glColor3f ( 0.3,0.3,0.3 );     // dark gray
for(int i=10;i<180;i =10)  // draw point at every grid intersection
{
    for(int j=10;j<180;j =10)
    {
        glVertex2f( i,j );
    }
}
glEnd();   

glFlush();  // Render now

}   


int main(int argc, char** argv)
{
//GLUT amp; OpenGL
glutInit(amp;argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(200, 200);

//glutInitWindowPosition(0, 0);
glutCreateWindow("GLUT Program");
//glutCreateWindow("Colored Square");
init();
glutDisplayFunc(coloredSquare);
glutMainLoop();
return 0;   /* ISO C requires main to return int. */

}
  

Если у кого-то есть какая-то идея, пожалуйста, пролейте на это свет
спасибо

Комментарии:

1. Попробуйте вызвать glutSwapBuffers() после glFlush() , чтобы посмотреть, работает ли это.

2. @anon: Он указал GLUT_SINGLE , поэтому не должно быть обратного буфера для обмена.

3. @BenVoigt: Упс. Сначала этого не заметил.

Ответ №1:

Ваша геометрия отключена. Окно просмотра OpenGL по умолчанию (-1..1, -1..1).

Начните с чего-то подобного в верхней части coloredSquare() :

 glLoadIdentity();
glTranslatef(-1, -1, 0);
glScalef(1/90.0, 1/90.0, 1/90.0);
  

Примечание: Убедитесь, что в режиме матрицы используется режим model-view, что может потребовать добавления к приведенным выше строкам следующей строки, если вы установили режим проекции в другом месте:

 glMatrixMode(GL_MODELVIEW);