使用OpenGL和GLFW的简单三角形[重复]

Posted

技术标签:

【中文标题】使用OpenGL和GLFW的简单三角形[重复]【英文标题】:Simple triangle using OpenGL and GLFW [duplicate] 【发布时间】:2014-07-17 08:02:09 【问题描述】:

我编写了一个小程序来使用顶点缓冲区显示一个简单的三角形。对于我使用 glfw 的窗口,我的环境是 Mac 10.9,XCode 5。

窗口显示为黑色,但三角形未绘制。

代码如下:

#include <GLFW/glfw3.h>
#include <OpenGL/gl.h>
#include <iostream>

int main(int argc, const char * argv[])

    GLFWwindow* window;
    if (!glfwInit())
    
        return -1;
    

    glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 1);
    glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    window = glfwCreateWindow(640, 480, "Hello Triangle", NULL, NULL);
    if (!window) 
    
        glfwTerminate();
        return -1;
    

    glfwMakeContextCurrent(window);

    GLfloat verts[] =
    
        0.0f,  0.5f,  0.0f,
        0.5f, -0.5f,  0.0f,
        -0.5f, -0.5f,  0.0f
    ;

    //Generate a buffer id
    GLuint vboID;

    //Create a buffer on GPU memory
    glGenBuffers(1, &vboID);

    //Bind an arraybuffer to the ID
    glBindBuffer(GL_ARRAY_BUFFER, vboID);

    // Fill that buffer with the client vertex
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);

    //Enable attributes
    glEnableVertexAttribArray(0);

    // Setup a pointer to the attributes
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    while (!glfwWindowShouldClose(window))
    
        glDrawArrays(GL_TRIANGLES, 0, 3);

        glfwPollEvents();
        glfwSwapBuffers(window);
    

    glfwTerminate();
    return 0;

【问题讨论】:

【参考方案1】:

您正在为渲染选择 OpenGL 核心配置文件:

glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

您的代码缺少一些符合核心配置文件的内容:

您需要实现着色器程序。 Core Profile 不再支持旧的固定管道,并且需要您在 GLSL 中实现自己的着色器。详细解释如何执行此操作超出了答案的范围,但您将使用 glCreateProgramglCreateShaderglShaderSourceglCompileShaderglAttachShaderglLinkProgram 之类的调用。您应该能够在网上和书中找到资料。 您需要使用顶点数组对象 (VAO)。查找glGenVertexArraysglBindVertexArray

【讨论】:

嗨 Reto,非常感谢。它有效。

以上是关于使用OpenGL和GLFW的简单三角形[重复]的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 绘制 2个不同颜色的三角形

无法获得简单的 2D 着色器以在 C++ openGL 中绘制红色三角形(无编译器错误)

OpenGL 三角形不会在 macOS 上渲染?

OpenGL程序没有显示三角形

三角形不出现在opengl中? [关闭]

OpenGL:不能不渲染三角形