我试图通过传递带有向量的信息来构建网格。我认为那一定是一样的。但这是行不通的。此向量中的实际信息必须正确,因此我可以确定问题是建立实际的bufferData。
有人暗示那里出了什么问题吗?还是我可能以更好的方式做到这一点?
void MeshBuilder::buildMesh(std::vector<Vertex> vert, std::vector<int> index){
Vertex vertex;
//Vertex Array Object: Binds Buffer Obj
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
std::vector<GLfloat> verticies;
for (int i = 0; i < vert.size(); i++) {
verticies.push_back(vert[i].getPosition().x);
verticies.push_back(vert[i].getPosition().y);
verticies.push_back(vert[i].getPosition().z);
verticies.push_back(vert[i].getNormals().x);
verticies.push_back(vert[i].getNormals().y);
verticies.push_back(vert[i].getNormals().z);
verticies.push_back(vert[i].getTexture().x);
verticies.push_back(vert[i].getTexture().y);
}
std::vector<int> indicies;
for (int i = 0 ; i < index.size(); i++) {
indicies.push_back(i);
}
//Vertex Buffer Object
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, verticies.size()*sizeof(GLfloat), &verticies, GL_STATIC_DRAW);
//Attributes
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, vertex.SIZE*4, (GLvoid*)0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, vertex.SIZE*4, (GLvoid*)12);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, vertex.SIZE*4, (GLvoid*)24);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glBindVertexArray(0);
//Element Buffer Object
glGenBuffers(1, &ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicies.size()*sizeof(int), &indicies, GL_STATIC_DRAW);
std::cout << "Mesh buildet..." << std::endl;
}
在您的方法声明和定义中,尝试将其从void MeshBuilder::buildMesh(std::vector<Vertex> vert, std::vector<int> index);
更改void MeshBuilder::buildMesh(std::vector<Vertex>& vert, std::vector<int>& index)
为通过引用传递,而不是进行复制;这将有助于加快速度。
我能看到的可能导致问题的唯一另一件事是,在定义索引之前要停止顶点数组。尝试将您glBindVertexArray(0);
的//Element Buffer Object
代码移到这三行代码之后的代码之前。看看这是否有所不同。
此外,请确保在此函数结束之前或在调用此函数之后执行以下操作:
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句