Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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
Android 纹理/顶点的不同索引数组_Android_Opengl Es_Blender_Texture Mapping_.obj - Fatal编程技术网

Android 纹理/顶点的不同索引数组

Android 纹理/顶点的不同索引数组,android,opengl-es,blender,texture-mapping,.obj,Android,Opengl Es,Blender,Texture Mapping,.obj,我试图用Android绘制一个地球仪,我使用OpenGL来实现这一点。然而,为了更容易理解,我将从制作一个简单的3D立方体开始。我使用Blender创建我的3D对象(立方体),并在我将其展开以获取纹理坐标(vt)后将其导出为.obj文件。问题是我得到了8个不同的顶点和9个不同的纹理坐标 v1.000000-1.000000-1.000000 v1.000000-1.0000001.000000 v-1.000000-1.0000001.000000 v-1.000000-1.000000-1.0

我试图用Android绘制一个地球仪,我使用OpenGL来实现这一点。然而,为了更容易理解,我将从制作一个简单的3D立方体开始。我使用Blender创建我的3D对象(立方体),并在我将其展开以获取纹理坐标(vt)后将其导出为.obj文件。问题是我得到了8个不同的顶点和9个不同的纹理坐标

v1.000000-1.000000-1.000000
v1.000000-1.0000001.000000
v-1.000000-1.0000001.000000
v-1.000000-1.000000-1.000000
v1.0000001.000000-1.000000
v 0.999999 1.0000001.000001
v-1.0000001.0000001.000000
v-1.0000001.000000-1.000000
vt 0.000000 0.000000
vt 0.000000-1.000000
vt-1.000000-1.000000
vt-1.0000000.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 1.0000000.000000
vt-1.0000001.000000
1.000000瓦特-1.000000瓦特

因此,我还得到了一个真正混乱的索引设置,这使得不可能重新排列纹理坐标的位置以匹配顶点中的位置

f 5/1 1/2 4/3
f 5/14/3 8/4
f 3/17/5 8/6
f 3/18/6 4/7
f 2/16/5 3/4
f 6/7 7/1 3/2
f 1/15/5 2/4
f 5/7 6/1 2/2
f 5/5 8/8 6/1
f 8/17/26/9
F1/12/23/3
f 1/13/3 4/4

由于iv'e understod现在我只能使用一个数组作为索引,因为一个顶点同时包含顶点和纹理坐标。因此,我需要重新排列一个v/vt阵列。但是我不能,因为如果我将vt(位置1)移动到位置5(第一行面),我需要再次移动它,使其通过索引数组


所以基本上我想知道这是否是程序“Blender”的问题,或者是否有一个解决方案我可以应用

你在那里看到的是完全正常的,事实上,如果立方体被正确地展开,我会看到超过9个纹理坐标。如果以一种普通的方式打开一个立方体,我相信你真的应该有12个VT


整个顶点通常由其xyz坐标、法线坐标和纹理坐标组成。如果所有这些部分都相同,则单个顶点只能保持一个索引位置(相对于OpenGL中的索引数组)。如果您查看面是如何定义的,它们由同时包含v和vt的顶点组成。如果您也有法线,它们将有一个额外的数字来表示使用的每个法线(或OBJ导出中的vn线)。在面中,取顶点5/1、5/5和5/7。xyz坐标相同,但纹理坐标不同。这是因为展开时,3D空间中的同一点在UV/图像编辑器上显示在3个位置。因此,OpenGL端的索引数组中将有3个单独的索引。

据我所知,Blender OBJ导出脚本工作正常。你用的是2.49还是2.57?我用的是2.57。但是我再得到一个vt,然后得到v,这不是有点奇怪吗?一点也不奇怪,这完全取决于你如何打开包装。你本可以再喝几杯的。我将尝试发布一个答案,因为我已经解决了从Blender到OBJ格式再到OpenGL ES和Android阵列的问题,信不信由你?这不是答案