我可以用矢量(OpenGL)构建我的网格吗?
Can I build my meshes with a vector (OpenGL)
我试图通过传递向量信息来构建我的网格。我想肯定是一样的。但这并没有奏效。这个向量中的实际信息必须是正确的,所以我实际上很确定问题是构建实际的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 );
- Stop Buffer -
glBindBuffer( GL_ARRAY_BUFFER, 0 );
- 停止缓冲区索引-
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 我必须构建才能摆脱 Eclipse 中的错误吗?
- 如何在Cmake中正确查找头路径,以便在我的项目中构建Box2D
- 当我尝试构建此程序时,出现此错误:需要左键作为赋值的左操作数
- 如何在构建时改进我的脚本和复制程序资源?
- 如何构建默认使用我自己的构建libc ++的clang?
- SQLite - 从源代码构建库或将源代码直接包含在我的项目中
- 为什么当我的项目是使用 Android NDK r16 构建时,我会收到来自 Android NDK r11 的错误消息
- 我的lambda在复制构建期间没有正确转换捕获的"this"
- 如何在不使用tensorflow的情况下构建tfsensor并将其提供给我的docker服务器
- 我的代码在构建时没有任何错误,但无法正常工作
- 在我的 cpp 或头文件中找不到错误,类构建失败
- 我如何构建一个从git克隆的单独的增强库
- 当我构建和编译我的C 项目时,没有通过我的CMake文件找到正确的C 库,我在做什么错
- 如何确保Win-Builder用C 11构建我的包裹
- 使用QtCreator,如何在我有权访问ssh的远程服务器上构建我的项目?
- 我的构建二叉树解决方案有什么问题?
- 我如何让Anjuta突出显示我的构建系统(waf)产生的错误/行