【问题标题】:c++ opengl 4.5 doesn't show the objectc++ opengl 4.5不显示对象
【发布时间】:2021-12-31 14:22:09
【问题描述】:

我编写的代码必须显示三角形,但事实并非如此。真不知道哪里出了问题。我检查了所有内容,但没有找出问题所在。如果可以,请帮助我。

代码如下:

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <glm.hpp>

int width = 800, height = 600;

int main() {

    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window = glfwCreateWindow(width, height, "engine", NULL, NULL);
    glfwMakeContextCurrent(window);

    gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);

    glViewport(0, 0, width, height);

    const char* VertexShaderData = "#version 450 core\n"
        "layout(location = 0) in vec2 pos;\n"
        "void main(){\n"
        "gl_Position = vec4(pos, 0, 1);\n"
        "}\0";

    GLuint VertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(VertexShader, 1, &VertexShaderData, NULL);
    glCompileShader(VertexShader);

    const char* FragmentShaderData = "#version 450 core\n"
        "out vec4 Color;\n"
        "void main(){\n"
        "Color = vec4(0.25, 0.8, 0.65, 1);\n"
        "}\0";

    GLuint FragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(FragmentShader, 1, &FragmentShaderData, NULL);
    glCompileShader(FragmentShader);

    GLuint ShaderProgram = glCreateProgram();
    glAttachShader(ShaderProgram, VertexShader);
    glAttachShader(ShaderProgram, FragmentShader);
    glLinkProgram(ShaderProgram);

    float Points[] = { -1, -1, 0, 1, 1, -1 };
    
    GLuint VAO, VBO;
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);

    glBindVertexArray(VAO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(float), (void*)0);
    glBufferData(GL_ARRAY_BUFFER, 6, Points, GL_STATIC_DRAW);

    glClearColor(0.3, 0.5, 0.7, 1);

    while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);

        glClear(GL_COLOR_BUFFER_BIT);

        glBindVertexArray(VAO);
        glEnableVertexAttribArray(0);
        glUseProgram(ShaderProgram);

        glDrawArrays(GL_TRIANGLES, 0, 3);
    }
}

以前我相信阵列中有什么问题,但现在我不这么认为。问题肯定出在别的地方。

【问题讨论】:

    标签: c++ opengl opengl-4


    【解决方案1】:

    glBufferData 的第二个参数是缓冲区的大小(以字节为单位):

    glBufferData(GL_ARRAY_BUFFER, 6, Points, GL_STATIC_DRAW);

    glBufferData(GL_ARRAY_BUFFER, 6*sizeof(float), Points, GL_STATIC_DRAW);
    

    【讨论】:

    • 我是盲人。非常感谢。
    • @NormalName 不客气。顺便说一句,您的应用程序循环中缺少glfwPollEvents()
    • 我计划稍后添加。现在我不会专注于图形。
    • @NormalName 您的窗口没有响应。您可以通过在 while-loop 中添加 glfwPollEvents(); 来解决此问题。
    • 好的。感谢提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多