Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VAO不渲染_C++_Opengl_Glfw_Glew - Fatal编程技术网

C++ VAO不渲染

C++ VAO不渲染,c++,opengl,glfw,glew,C++,Opengl,Glfw,Glew,我制作了一个加载程序类来加载V.a.Os纹理等,但是当我使用这个方法时 GLuint Loader::loadToVAO(GLfloat* vertices) { GLuint VertexArrayID; glGenVertexArrays(1, &VertexArrayID); glBindVertexArray(VertexArrayID); GLuint vertexbuffer; glGenBuffers(1, &vertexb

我制作了一个加载程序类来加载V.a.Os纹理等,但是当我使用这个方法时

GLuint Loader::loadToVAO(GLfloat* vertices)
{
    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID);
    glBindVertexArray(VertexArrayID);

    GLuint vertexbuffer;
    glGenBuffers(1, &vertexbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    return vertexbuffer;
}
它不渲染任何内容。这是我的渲染代码:

window.createWindow();

GLfloat vertices[] = {
    -1.0f, -1.0f, 0.0f,
    1.0f, -1.0f, 0.0f,
    0.0f,  1.0f, 0.0f,
};

GLuint vertexbuffer = loader.loadToVAO(vertices);

glClearColor(0, 1, 1, 0);

// It works fine when i generate the vao in the main method but not in the loader class
GLuint vertexbuffer1;
glGenBuffers(1, &vertexbuffer1);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer1);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

std::cout << vertexbuffer1 << std::endl;
std::cout << vertexbuffer << std::endl;

while (!window.shouldClose())
{
    window.clearWindow();

    // render here
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer1);
    glVertexAttribPointer(
        0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
        3,                  // size
        GL_FLOAT,           // type
        GL_FALSE,           // normalized?
        0,                  // stride
        (void*)0            // array buffer offset
    );
    // Draw the triangle !
    glDrawArrays(GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle
    glDisableVertexAttribArray(0);

    window.updateWindow();
}

return 0;
当我尝试渲染vertexbuffer1(主方法中加载的vertexbuffer1)时,渲染效果很好,但vertexbuffer不渲染任何内容。 任何帮助都将不胜感激

编辑: 下面是我要学习的教程-

您正在函数中的指针类型上使用sizeof,这几乎肯定不是您想要的。数组不是C语言和C++语言,它们会退化为指针,指针不包含它们存储的数据量的信息。您要做的是将数组的大小作为附加参数传递:

GLuint Loader::loadToVAO(GLfloat* vertices, size_t num_vertices)
{
    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID);
    glBindVertexArray(VertexArrayID);

    GLuint vertexbuffer;
    glGenBuffers(1, &vertexbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(*vertices) * num_vertices, vertices, 
    GL_STATIC_DRAW);
    return vertexbuffer;
}
然后在您的主要功能中:

GLuint vertexbuffer = loader.loadToVAO(vertices, sizeof(vertices) / sizeof(vertices[0]));

我鼓励你多读一些关于这个话题的内容。

非常感谢你,伙计!!我已经挣扎了好几天了非常感谢