在 Opengl 中画一条线不显示 C++

Drawing a line in Opengl not displaying C++

我正在尝试在我的 window 上画一条直线。屏幕颜色正常,但这条线似乎没有画出来。我相当确定这是因为我可能将位置设置错误并且该行被从 [​​=15=] 剪掉但我不确定如何解决此问题。

我的完整代码

#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;
}

如评论中所述,您必须使用 GL_LINES 而不是 GL_LINE,因为 GL_LINE 不是有效的 Primitive 类型。

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

但是还有一个问题。默认矩阵模式是GL_MODELVIEW(见glMatrixMode),所以正射投影设置为模型视图矩阵,并被单位矩阵覆盖(glLoadIdentity)。您必须在 glOrtho:

之前设置矩阵模式 GL_PROJECTION
glMatrixMode(GL_PROJECTION); // <----
glOrtho(0, windowWidth, 0, windowHeight, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();