OpenGL не отображает 2D линии - PullRequest
0 голосов
/ 12 сентября 2018

Я использую Ubuntu 18.04 LTS и пытаюсь реализовать 2d строки, используя OpenGl, но он ничего не отображает. я использую компилятор Ubuntu. Я установил библиотеку, используя терминал .

вот мой код

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINES);
    glVertex2i(10,10);
    glVertex2i(100,100);
    glEnd();

    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (500, 500);
    glutInitWindowPosition (100, 100);
    glutCreateWindow ("points and lines");
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

вот как я компилирую и запускаю свою программу

 g++ jamshaid.cpp -o jamoo -lglut -lGLU -lGL
./jamoo

Обновление 1

добавил init2D и попробовал другой ответ, но не работает. оно даже не меняет заголовок окна.

обновление 2

после обновления кода с этого сайта. Теперь у меня есть этот код, и он работает. не могли бы вы объяснить, почему это так. спасибо

#include <GL/glut.h>

 void init2D(float r, float g, float b)
 {
 glClearColor(r,g,b,0.0);  
 glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
    glVertex2i(10,10);
    glVertex2i(100,100);
 glEnd();
 glFlush();
 }

int main(int argc,char *argv[])
 {
 glutInit(&argc,argv);
 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
 glutInitWindowSize (500, 500);
 glutInitWindowPosition (100, 100);
 glutCreateWindow ("points and lines");
 init2D(0.0,0.0,0.0);
 glutDisplayFunc(display);
 glutMainLoop();
 return 0;}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Как сказал Тунг Ле Тхань, вам нужна правильная инициализация матрицы проекции, и вот что она делает:

glMatrixMode (GL_PROJECTION)

glMatrixMode - укажите, какая матрица является текущей матрицей

                GL_PROJECTION
                    Applies subsequent matrix operations to the projection matrix stack.
                GL_TEXTURE
                    Applies subsequent matrix operations to the texture matrix stack.
                GL_COLOR
                    Applies subsequent matrix operations to the color matrix stack.

        To find out which matrix stack is currently the target of all matrix
        operations, call glGet with argument GL_MATRIX_MODE. The initial
        value is GL_MODELVIEW.

gluOrtho2D

gluOrtho2D - определить матрицу двумерной ортографической проекции

Спецификация

void gluOrtho2D(GLdouble left,  GLdouble right,  GLdouble bottom,  GLdouble top); 

Параметры

  left, right
            Specify the coordinates for the left and right vertical clipping planes.
  bottom, top
            Specify the coordinates for the bottom and top horizontal clipping planes.

Описание

        gluOrtho2D sets up a two-dimensional orthographic viewing region.  
0 голосов
/ 12 сентября 2018

Как показано в примере здесь , вам нужна правильная функция init2D для инициализации матрицы 3D-проекции перед рисованием.

void init2D(float r, float g, float b)
{
    glClearColor(r,g,b,0.0);  
    glMatrixMode (GL_PROJECTION);
    gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
...