Рисование линии в Opengl без отображения С++

Я пытаюсь провести линию прямо через окно Цвет экрана работает, но линия не рисуется. Я совершенно уверен, что это связано с тем, что я мог установить неправильное положение, и линия обрезается из окна, но я не уверен, как это исправить.

мой полный код

#include <GL\glew.h>
#include <GLFW/glfw3.h>
#include <GL\glut.h>
#include <glm.hpp>
#include <GL\freeglut.h>
#include <GL\GL.h>
#include <IL/il.h>

using namespace std;

 int main() {
    int windowWidth = 1024, windowHeight = 1024;
    if (!glfwInit())
        return -1;


    GLFWwindow* window;
    window = glfwCreateWindow(windowWidth, windowHeight, "electroCraft", NULL, NULL);
    glfwMakeContextCurrent(window); // stes the specified window as active INACTIVE SCREEN IF WINDOW NOT CURRENT!!!!
    if (!window) {
        glfwTerminate();
        printf("Screen failed to start. ABORTING...\n");
        return -1;
    }
    glViewport(0, 0, windowWidth, windowHeight);
    glOrtho(0, windowWidth, 0, windowHeight, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glEnable(GL_DEPTH_TEST);
    while (!glfwWindowShouldClose(window)) {
        glClearColor(62.0f / 255.0f, 85.9f / 255.0f, 255.0 / 255.0, 0.0);
        glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

        //begin drawing
        glBegin(GL_LINE);
        glVertex2f(20, 100);
        glVertex2f(600, 100);
        glEnd();

        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}

person Dextron    schedule 29.10.2019    source источник
comment
Пожалуйста, проверьте наличие ошибок OpenGL (glGetError). Вы должны получить GL_INVALID_ENUM вместо glBegin(GL_LINE);, потому что GL_LINE не является допустимым режимом. Вместо этого используйте GL_LINES.   -  person BDL    schedule 29.10.2019
comment
изменение GL_LINE на GL_LINES не решает проблему   -  person Dextron    schedule 29.10.2019


Ответы (1)


Как упоминалось в комментарии, вы должны использовать GL_LINES, а не GL_LINE, потому что GL_LINE не является допустимым Примитивный тип.

glBegin(GL_LINES); // <----
glVertex2f(20, 100);
glVertex2f(600, 100);
glEnd();

Но есть еще одна проблема. Режим матрицы по умолчанию — GL_MODELVIEW (см. glMatrixMode), поэтому орфографическая проекция устанавливается на матрицу вида модели и перезаписывается матрицей идентичности (glLoadIdentity). Вы должны установить режим матрицы GL_PROJECTION перед glOrtho:

glMatrixMode(GL_PROJECTION); // <----
glOrtho(0, windowWidth, 0, windowHeight, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
person Rabbid76    schedule 29.10.2019