FreeGlut (аналогично OpenGL) вместо рисования фигур снимает мой рабочий стол - PullRequest
0 голосов
/ 26 декабря 2018

Genpfault очень сильно помог мне в компиляции моего кода.Код ниже является сокращенной версией того, с чем я сейчас работаю.Однако Glut не позволяет мне рисовать фигуры.Единственное, что происходит, когда я запускаю исполняемый файл после компиляции, это то, что я вижу скриншот моего рабочего стола.

Как я могу исправить это, чтобы я мог рисовать цветные треугольники и многоугольники на черном экране? Скриншот того, как выглядит программа при запуске

#include <iostream>
#include <GL/freeglut.h>

namespace GameBoxes
{
    template<class T>
    class Box
    {
        public:
            void display( void );
    };
} //GameBoxes

namespace GameBoxes
{
    template <class T>
    void Box<T>::display( void )
    {
        glClearColor( 0.0, 0.0, 0.0, 0.0 );       // black background
        glClear( GL_COLOR_BUFFER_BIT );
        glColor3f( 0.2, 0.2, 0.2 );
        glBegin( GL_TRIANGLES );
        glVertex2f( -0.5, -0.5 );
        glVertex2f(  0.5, -0.5 );
        glVertex2f(  0.0,  0.5 );
        glutSwapBuffers();
    }
} // GameBoxes

int main( int argc, char **argv )
{
    glutInit( &argc, argv );

    int windowPos1 = 0, windowPos2 = 0, windowSize1 = 400, windowSize2 = 400;
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
    glutInitWindowPosition( windowPos1, windowPos2 );
    glutInitWindowSize( windowSize1, windowSize2 );
    glutCreateWindow( "square" );

    GameBoxes::Box<double> square;

    glutSetWindowData( &square );
    glutDisplayFunc( []()
    {
        auto instance = static_cast< GameBoxes::Box<double>* >(    glutGetWindowData() );
        instance->display();
    } );
    glutMainLoop();

    return 0;
};

1 Ответ

0 голосов
/ 26 декабря 2018

Вы пропустили завершение последовательности glBegin / glEnd с glEnd

template <class T>
void Box<T>::display( void )
{
    glClearColor( 0.0, 0.0, 0.0, 0.0 );       // black background
    glClear( GL_COLOR_BUFFER_BIT );
    glColor3f( 0.2, 0.2, 0.2 );
    glBegin( GL_TRIANGLES );
    glVertex2f( -0.5, -0.5 );
    glVertex2f(  0.5, -0.5 );
    glVertex2f(  0.0,  0.5 );
    glEnd();  // <-------------- add glEnd
    glutSwapBuffers();
}

Обратите внимание, что рисунок glBegin /glEnd последовательности устарели с десятилетий.Прочитайте о Конвейере фиксированных функций и посмотрите Спецификация вершин и Шейдер , чтобы узнать о современном способе рендеринга.

...