C++ VAO不渲染
我制作了一个加载程序类来加载V.a.Os纹理等,但是当我使用这个方法时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
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]));
我鼓励你多读一些关于这个话题的内容。非常感谢你,伙计!!我已经挣扎了好几天了非常感谢