Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl-带VBO纹理的OBJ文件索引列表(GLD元素)_Opengl_Textures_Vbo_Wavefront - Fatal编程技术网

Opengl-带VBO纹理的OBJ文件索引列表(GLD元素)

Opengl-带VBO纹理的OBJ文件索引列表(GLD元素),opengl,textures,vbo,wavefront,Opengl,Textures,Vbo,Wavefront,我已经为opengl制作了一个obj加载程序。因此,我读取所有面(一个接一个),并将有序顶点、法线和uv坐标写入(openGL-)缓冲区(GL_数组_缓冲区)。这意味着我将根据obj文件中的“面”部分显示的内容来消除所有必要的顶点、法线和uv坐标。然后我用gldrawArray()绘制它们 。。。都很好 为了节省一些内存,我想使用一个索引列表,并使用gl抽屉元素(),但我遇到了一个问题。请参见以下两张图片: 考虑顶点P0和三角形,以及它在OBJ文件的面部分中是什么 三角 T1 -->

我已经为opengl制作了一个obj加载程序。因此,我读取所有面(一个接一个),并将有序顶点、法线和uv坐标写入(openGL-)缓冲区(GL_数组_缓冲区)。这意味着我将根据obj文件中的“面”部分显示的内容来消除所有必要的顶点、法线和uv坐标。然后我用gldrawArray()绘制它们

。。。都很好

为了节省一些内存,我想使用一个索引列表,并使用gl抽屉元素(),但我遇到了一个问题。请参见以下两张图片:

考虑顶点P0和三角形,以及它在OBJ文件的面部分中是什么

三角

T1 --> f   vertex(0)/P0/normal(0)   vertex(1)/P1/normal(1)   vertex(2)/P2/normal(2)

T2 --> f   vertex(0)/P0/normal(0)   vertex(1)/P1/normal(1)   vertex(5)/P5/normal(5)

T3 --> f   vertex(0)/P0/normal(0)   vertex(2)/P2/normal(2)   vertex(3)/P3/normal(3)
。。。很好,但是

T4 --> f   vertex(0)/P'0/normal(0)   vertex(3)/P3/normal(3)   vertex(4)/P4/normal(4)

T5 --> f   vertex(0)/P'0/normal(0)   vertex(4)/P4/normal(4)   vertex(5)/P5/normal(5)
好的,有什么问题吗

vertex(0)/P0/normal(0) != vertex(0)/P'0/normal(0)
我认为解决办法是:

  • 每个顶点、法线、UV的列表
  • 读取OBJ文件的“面”部分
    • 获取顶点的索引->将顶点写入顶点列表中的位置(索引)
    • 在正常列表中写入正常接通位置(索引)
    • 在uv列表中写入uv on位置(索引)
    • 现在问题的顶点有不同的uv坐标,因此
      • 如果列表元素不是“空”或非0-->确定有一个顶点,我们必须复制当前顶点、法线和UV,并将它们写入所有列表中的新索引,然后将新索引写入索引列表
现在我的问题是


对于obj文件的面部分中的同一顶点,是否有更好的方法处理不同uv坐标的问题?

我知道这是一个老问题,但我自己也面临同样的问题。我基本上在想你的建议;重建垂直阵列、纹理阵列和法线阵列以匹配标记阵列长度。这将自然地创建重复项,但只需使用gldrawerelements传入适当的数组就相当简单了。不过,我还在做这方面的家庭作业。如果api有更好的方法允许跨越索引,那将非常有用。事实上,为什么这不是一个选择让我非常困惑。