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

标签 c++ opengl glfw

我正在尝试在 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;
}

最佳答案

您不能使用传统的固定功能流水线指令(glBeginglEndglVertex2fglMatrixModeglLoadIdentity, glOrtho) 在核心配置文件 OpenGL 上下文中 (GLFW_OPENGL_CORE_PROFILE)。您必须使用兼容性配置文件 OpenGL Context :

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

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

关于c++ - 为什么 OpenGL GLFW 渲染形状不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74169281/

相关文章:

c++ - 定义流畅的界面会对性能产生影响吗?

c++ - 如何在模板中调用带有参数的模板函数?

c++ - LLDB 中 GDB 的 “define” 是什么?

opengl - 在 Ubuntu 中安装 OpenGL 和 OpenAL

c++ - 如何使用 Qt3D 渲染现有的 OpenGL 纹理

opengl - 如何在 OpenGL 中将图元渲染为线框?

c++ - 使用 Emscripten 将 OpenGL ES 转换反馈数据返回给主机

opengl - Haskell 的 GLUT 替代品?

c++ - 静态链接 GLFW 时未定义对 `__ms_vsnprintf' 的引用

Python ctypes,将 c_void_p 作为输出参数传递给 c 函数