我正在使用一个带有一堆GLfloats的OpenGL缓冲区作为顶点缓冲区,一切都很顺利.GLfloats的格式是[x1, y1, z1, x2, y2, z2, ...].
但是,在遵循本教程的同时,它告诉我使用glm::vec3:
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(GLfloat), &vertices[0], GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
现在这段代码是有效的,我想知道OpenGL如何知道如何用glm :: vec3而不是GLfloats填充缓冲区.然后我想知道,当我从缓冲区读回数据时,使用:
std::vector<glm::vec3> data;
glGetBufferSubData(mTarget, offset, vertexCount * sizeof(glm::vec3), &data[0]);`
Run Code Online (Sandbox Code Playgroud)
这会产生一堆glm :: vec3吗?所以问题是,OpenGL如何填充缓冲区glm::vec3,并且它(如果是这样,如何)读取缓冲区?