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
.obj文件转换为OpenGL模型头文件-索引和f参数?_Opengl_Header_Object Files - Fatal编程技术网

.obj文件转换为OpenGL模型头文件-索引和f参数?

.obj文件转换为OpenGL模型头文件-索引和f参数?,opengl,header,object-files,Opengl,Header,Object Files,我正在使用的OpenGL模型头文件包含以下定义: 静态常量浮点模型顶点[NUM_OBJECT_VERTEX*3]={} static const float modelTexCoords[NUM_OBJECT_VERTEX*2]={} static const float modelnorms[NUM_OBJECT_VERTEX*3]={} 静态常量无符号短模型索引[NUM_OBJECT_INDEX]={} 括号中有一组数字(浮点数和整数,如拟合)由逗号分隔 将.obj文件的v,vt,vn转换为

我正在使用的OpenGL模型头文件包含以下定义:

静态常量浮点模型顶点[NUM_OBJECT_VERTEX*3]={}

static const float modelTexCoords[NUM_OBJECT_VERTEX*2]={}

static const float modelnorms[NUM_OBJECT_VERTEX*3]={}

静态常量无符号短模型索引[NUM_OBJECT_INDEX]={}

括号中有一组数字(浮点数和整数,如拟合)由逗号分隔

将.obj文件的
v,vt,vn
转换为上述格式似乎很简单。My.obj文件还有一组
f
,其中包括由
/
分隔的三元组。我不确定这些参数到底是什么

我需要转换哪些参数才能得到第四个参数——模型索引


(我需要事先承认我是OpenGL的新手,如果这看起来太简单,我深表歉意!)

三胞胎只是一个面部定义

如果你有 f 1 2 3

这意味着您有一个由索引1、2和3的顶点组成的三角形

如果所有条目都是这样,这意味着您可以直接用这些索引填充
模型索引
,并使用
GL_三角形
绘制它们

现在,如果它们由
/
分隔,这意味着您在顶点位置和纹理坐标和/或法线之间有不同的映射

这是一种方法,您可以将texcoord和normal数据分解为与vertice position数组大小相同的数组

这样做很简单:下面是伪代码:

read face data (triplets)
for each triplet
   read vertex indice
   read texcoord and normal indices
   fetch texcoord @ texcoord indice from your vt array
   store texcoord @ vertex indice in your modelTexCoords array
   fetch normal @ normal indice from your vn array
   store normal @ vertex indice in your modelTexCoords array

   etc

另请参见维基百科的文档,该文档解释得很好。obj格式:

三胞胎只是一个面部定义

如果你有 f 1 2 3

这意味着您有一个由索引1、2和3的顶点组成的三角形

如果所有条目都是这样,这意味着您可以直接用这些索引填充
模型索引
,并使用
GL_三角形
绘制它们

现在,如果它们由
/
分隔,这意味着您在顶点位置和纹理坐标和/或法线之间有不同的映射

这是一种方法,您可以将texcoord和normal数据分解为与vertice position数组大小相同的数组

这样做很简单:下面是伪代码:

read face data (triplets)
for each triplet
   read vertex indice
   read texcoord and normal indices
   fetch texcoord @ texcoord indice from your vt array
   store texcoord @ vertex indice in your modelTexCoords array
   fetch normal @ normal indice from your vn array
   store normal @ vertex indice in your modelTexCoords array

   etc

另请参阅wikipedia的文档,该文档解释得很好。obj格式:

hmm,所以您是说
texcoord
(用于
modelTexCoords
)实际上在每个
/
-三元组中重复作为
顶点索引/texcoord/normal索引
?hmm,因此,基本上,
vn
modelTexCoords
的正常索引以及
modelNormals
中重复。。。此外,如果f中有一组
1/2/3
,则模型索引只是每个f三元组的第一个元素(在本例中为1)?是的,模型索引只是每个f三元组的第一个元素。我不明白你所说的“vn在modelTexCoords的正常索引中重复”是什么意思。我原以为obj中的
vn
直接映射到
modelNormals
,但是似乎
vn
modelTexCoords
中也会重复,另一件事是
v
vn
的每一行都显示三元组(用空格分隔),所以索引映射指的是行numbhmm,所以你说
texCoords
(用于
modelTexCoords
)实际上在每个
/
-三元组中重复,如
顶点索引/texcoord/normal索引
?hmm,因此基本上
vn
modelTexCoords
的normal索引以及
modelNormals
中重复。。。此外,如果f中有一组
1/2/3
,则模型索引只是每个f三元组的第一个元素(在本例中为1)?是的,模型索引只是每个f三元组的第一个元素。我不明白你所说的“vn在modelTexCoords的正常索引中重复”是什么意思。我原以为obj中的
vn
直接映射到
modelNormals
,但是,
vn
似乎在
modelTexCoords
中也再次重复了,
v
vn
的每一行都显示了三元组(用空格分隔),所以索引映射指的是行numb