为什么OpenGL GLFW渲染形状不起作用?

tmb3ates  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(184)

我正试图在C++中开始使用OpenGL和GLFW。我的期望是下面的代码将简单地在屏幕上渲染一个正方形,但我只是得到一个黑屏。
实际的设置是有效的,因为如果我添加glClearColor(0.1f, 0.4f, 0.8f, 1.0f);,我确实会得到蓝屏。但是我使用GL_QUADS有什么问题呢?


# include <iostream>

// GLEW

# define GLEW_STATIC

# include <GL/glew.h>

//GLFW

# include <GLFW/glfw3.h>

const GLint WIDTH = 800, HEIGHT = 600;

int main() {
    glfwInit();
    glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint( GLFW_RESIZABLE, GL_TRUE);

    GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Isosurface Stuffing", nullptr, nullptr);

    int screenWidth, screenHeight;
    glfwGetFramebufferSize(window, &screenWidth, &screenHeight);

    if (window == nullptr) {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();

        return -1;
    }

    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;

    if (GLEW_OK != glewInit()) {
        std::cout << "Failed to create GLEW" << std::endl;

        return -1;
    }

    while (!glfwWindowShouldClose(window)) {

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();

        glViewport(0, 0, screenWidth, screenHeight);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0.0f, screenWidth, 0.0f, screenHeight, 0.0f, 1.0f);
        glMatrixMode (GL_MODELVIEW);
        glLoadIdentity();

        glfwPollEvents();

        glColor3f(0.5f, 0.5f, 0.5f);
        glBegin(GL_QUADS);

        glVertex2f(100, 100);
        glVertex2f(200, 100);
        glVertex2f(200, 200);
        glVertex2f(100, 200);
        glEnd();

        glfwSwapBuffers(window);
    }

    glfwTerminate();
    return 0;
}
mepcadol

mepcadol1#

您无法在Core配置文件OpenGL上下文(GLFW_OPENGL_CORE_PROFILE)中使用传统固定功能管道指令(glBeginglEndglVertex2fglMatrixModeglLoadIdentityglOrtho)。您必须使用兼容性配置文件OpenGL Context
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

如果您的系统不允许您创建兼容性配置文件上下文(例如Mac),您必须使用OpenGL 2.0上下文或带有着色器和顶点阵列对象的现代OpenGL。一个很好的教程是LearnOpenGL

相关问题