gpt4 book ai didi

c++ - OBJ、Buffer 对象和面索引

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:12 26 4
gpt4 key购买 nike

我最近在让顶点缓冲区对象工作方面取得了很大进展。所以我转向了元素数组,我想通过这样的实现我可以从一个对象加载顶点和面数据。

我不太擅长用 C++ 读取文件,所以我写了一个 python 文档来解析 obj 并写了 2 个单独的 txts 来给我一个顶点数组和面索引,并将它们直接粘贴到我的代码中。这就像 6000 行,但它可以工作(没有编译错误)。这是它的样子

.

我认为他们错了。我不确定。顶点和面的顺序并没有改变,只是从 obj 中提取出来,因为我还没有适用于缓冲区对象的法线或纹理。如果你看一下立方体,我有点喜欢,但不是真的。

这是 render code

void Mesh_handle::DrawTri(){
glBindBuffer(GL_ARRAY_BUFFER,vertexbufferid);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,elementbufferid);
int index1=glGetAttribLocation(bound_program,"inputvertex");
int index2=glGetAttribLocation(bound_program,"inputcolor");
int index3=glGetAttribLocation(bound_program,"inputtexcoord");

glEnableVertexAttribArray(index1);
glVertexAttribPointer(index1,3,GL_FLOAT,GL_FALSE,9*sizeof(float),0);

glEnableVertexAttribArray(index2);
glVertexAttribPointer(index2,4,GL_FLOAT,GL_FALSE,9*sizeof(float),(void*)(3*sizeof(float)));

glEnableVertexAttribArray(index3);
glVertexAttribPointer(index3,2,GL_FLOAT,GL_FALSE,9*sizeof(float),(void*)(7*sizeof(float)));

glDrawArrays(GL_TRIANGLE_STRIP,0,elementcount);
//glDrawElements(GL_TRIANGLE_STRIP,elementcount,GL_UNSIGNED_INT,0);
}

我的 python 解析器只将信息写入文件:source

对象是英雄联盟的伊泽瑞尔

我不确定我是否看错了这些面孔,或者它们是否与我想象的不一样。我应该使用 GL_TRIANGLE_STRIP 还是其他东西。任何提示或请求更多信息。

最佳答案

obj 文件中的索引基于 1,因此您必须从所有索引中减去 1 才能将它们用于 OpenGL。

关于c++ - OBJ、Buffer 对象和面索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com