java - JAVA,使法线数组具有顶点数组的长度(来自已解析的OBJ文件)

标签 java arrays normals vertices .obj

我正在尝试重现一个采用obj文件的CSharp应用程序的OBJ文件解析,并使用其独特的内部结构(基于该obj文件)对其进行另一个文件保存,并将其保存为具有唯一扩展名的文件-不是1:1复制obj文件的内容:它只需要顶点,法线,uvs(如果有的话)和索引就可以将它们组成数组并用它进行几项不同的操作(这对我的问题根本不重要,但我还是告诉它只是为了显示一个位)。

我可以通过在JAVA应用程序中以二进制模式逐字节查看生成的文件(遍历它)并通过纯try / guess进程试图理解它成功背后的逻辑来做到这一点-我可以说很长的过程您。

现在,我已经成功地在我的JAVA应用程序中“模拟”了该应用程序的行为,该行为现在可以从源obj文件生成特殊文件,唯一的例外是我无法理解。

在OBJ文件中,顶点和法线的数量不同(例如,它可以具有266 * 3个顶点,而法线只有30 * 3个),但是我要模仿的CSharp应用程序可以某种方式使长度的法线这些顶点,即两个数组的长度相同。而且我找不到该计算背后的任何逻辑!

首先用小的OBJ文件,我认为它只是获取那些法线值,然后简单地将它们复制到顶点数组的长度,当我拥有5 * 3个Verty和3个法线时,奇迹般地起作用了,但是如果它是“不相等的”,那不是是vertices.length/normals.length != int的时间。

这两个(顶点/法线)之间是否存在某种关联,从而使CSharp应用程序“拉伸/填充”法线数组长度达到该vertices.length的长度?

这些是作为示例的两个OBJ文件(是的:这些正是我与该CSharp程序一起使用的OBJ文件中的文件,因此它们的结构是否“不正确”并不重要-这不是我的问题的本意,对我要问的问题没有影响)+我也不是一个提出使法线变短但要使顶点长的想法(谈论它们各自的数组),而且,顺便说一句,这仅仅是SW使用它产生的特殊文件,所以我理解为什么他会这样做-我只是想重现该过程,我无法理解原始作者是如何在他的CSharp应用程序中创建的,仅此而已,所以请不要告诉我这是荒谬的...是的,可能是,但是仍然需要车辆阵列长度:

这个第一个(较短的一个-vertices.length(v)/normals.length(vn)始终等于某个整数)与我的上述伪技术一起工作(只需一遍又一遍地复制法线,直到达到顶点数组的长度) )

v 4.400000 -0.000000 0.400000
v 4.400000 0.960000 0.400000
v -0.400000 -0.000000 0.400000
v -0.400000 0.960000 0.400000
vt 0.998166 1.001956
vt 0.998167 0.002486
vt 0.003233 1.001956
vt 0.003233 0.002488
vn 0.0000 -0.0000 1.0000
s 1
f 1/1/1 2/2/1 3/3/1
f 2/2/1 4/4/1 3/3/1


另一方面,第二个(较长的那个-vertices.length(v)/normals.length(vn)总是等于浮点数)从未使用过该技术(因为它只需要int而不是带小数点的浮点数),并且是我挠头解决问题的原因

v 4.400000 0.000000 -0.400000
v 4.400000 0.960000 -0.400000
v 4.400000 -0.000000 0.400000
v 4.400000 0.960000 0.400000
v -0.400000 -0.000000 0.400000
v -0.400000 0.960000 0.400000
v -0.400000 0.000000 -0.400000
v -0.400000 0.960000 -0.400000
v -0.400000 0.000000 -0.400000
v -0.400000 0.960000 -0.400000
v 4.400000 0.000000 -0.400000
v 4.400000 0.960000 -0.400000
v 4.400000 0.960000 0.400000
v 4.400000 0.960000 -0.400000
v -0.400000 0.960000 0.400000
v -0.400000 0.960000 -0.400000
v 4.400000 0.000000 -0.400000
v 4.250000 0.000000 -0.250000
v -0.400000 0.000000 -0.400000
v -0.250000 0.000000 -0.250000
v -0.400000 -0.000000 0.400000
v -0.250000 -0.000000 0.250000
v 4.400000 -0.000000 0.400000
v 4.250000 -0.000000 0.250000
v 4.250000 0.850000 -0.250000
v 4.250000 0.000000 -0.250000
v 4.250000 0.850000 0.250000
v 4.250000 -0.000000 0.250000
v 4.250000 0.850000 0.250000
v 4.250000 -0.000000 0.250000
v -0.250000 0.850000 0.250000
v -0.250000 -0.000000 0.250000
v -0.250000 0.850000 0.250000
v -0.250000 -0.000000 0.250000
v -0.250000 0.850000 -0.250000
v -0.250000 0.000000 -0.250000
v -0.250000 0.850000 -0.250000
v -0.250000 0.000000 -0.250000
v 4.250000 0.850000 -0.250000
v 4.250000 0.000000 -0.250000
v 4.250000 0.850000 -0.250000
v 4.250000 0.850000 0.250000
v -0.250000 0.850000 -0.250000
v -0.250000 0.850000 0.250000
v 4.212176 1.138000 -0.122500
v 4.212176 0.960000 -0.122500
v 4.122500 1.138000 -0.212176
v 4.122500 0.960000 -0.212176
v 4.000000 1.138000 -0.245000
v 4.000000 0.960000 -0.245000
v 3.877500 1.138000 -0.212176
v 3.877500 0.960000 -0.212176
v 3.787824 1.138000 -0.122500
v 3.787824 0.960000 -0.122500
v 3.755000 1.138000 -0.000000
v 3.755000 0.960000 -0.000000
v 3.787824 1.138000 0.122500
v 3.787824 0.960000 0.122500
v 3.877500 1.138000 0.212176
v 3.877500 0.960000 0.212176
v 4.000000 1.138000 0.245000
v 4.000000 0.960000 0.245000
v 4.122500 1.138000 0.212176
v 4.122500 0.960000 0.212176
v 4.212176 1.138000 0.122500
v 4.212176 0.960000 0.122500
v 4.245000 1.138000 0.000000
v 4.245000 0.960000 -0.000000
v 4.212176 1.138000 -0.122500
v 4.122500 1.138000 -0.212176
v 4.000000 1.138000 0.000000
v 4.000000 1.138000 -0.245000
v 3.877500 1.138000 -0.212176
v 3.787824 1.138000 -0.122500
v 3.755000 1.138000 -0.000000
v 3.787824 1.138000 0.122500
v 3.877500 1.138000 0.212176
v 4.000000 1.138000 0.245000
v 4.122500 1.138000 0.212176
v 4.212176 1.138000 0.122500
v 4.245000 1.138000 0.000000
v 3.412176 1.138000 -0.122500
v 3.412176 0.960000 -0.122500
v 3.322500 1.138000 -0.212176
v 3.322500 0.960000 -0.212176
v 3.200000 1.138000 -0.245000
v 3.200000 0.960000 -0.245000
v 3.077500 1.138000 -0.212176
v 3.077500 0.960000 -0.212176
v 2.987824 1.138000 -0.122500
v 2.987824 0.960000 -0.122500
v 2.955000 1.138000 -0.000000
v 2.955000 0.960000 -0.000000
v 2.987823 1.138000 0.122500
v 2.987823 0.960000 0.122500
v 3.077500 1.138000 0.212176
v 3.077500 0.960000 0.212176
v 3.200000 1.138000 0.245000
v 3.200000 0.960000 0.245000
v 3.322500 1.138000 0.212176
v 3.322500 0.960000 0.212176
v 3.412176 1.138000 0.122500
v 3.412176 0.960000 0.122500
v 3.445000 1.138000 0.000000
v 3.445000 0.960000 -0.000000
v 3.412176 1.138000 -0.122500
v 3.322500 1.138000 -0.212176
v 3.200000 1.138000 0.000000
v 3.200000 1.138000 -0.245000
v 3.077500 1.138000 -0.212176
v 2.987824 1.138000 -0.122500
v 2.955000 1.138000 -0.000000
v 2.987823 1.138000 0.122500
v 3.077500 1.138000 0.212176
v 3.200000 1.138000 0.245000
v 3.322500 1.138000 0.212176
v 3.412176 1.138000 0.122500
v 3.445000 1.138000 0.000000
v 2.612176 1.138000 -0.122500
v 2.612176 0.960000 -0.122500
v 2.522500 1.138000 -0.212176
v 2.522500 0.960000 -0.212176
v 2.400000 1.138000 -0.245000
v 2.400000 0.960000 -0.245000
v 2.277500 1.138000 -0.212176
v 2.277500 0.960000 -0.212176
v 2.187824 1.138000 -0.122500
v 2.187824 0.960000 -0.122500
v 2.155000 1.138000 -0.000000
v 2.155000 0.960000 -0.000000
v 2.187823 1.138000 0.122500
v 2.187823 0.960000 0.122500
v 2.277500 1.138000 0.212176
v 2.277500 0.960000 0.212176
v 2.400000 1.138000 0.245000
v 2.400000 0.960000 0.245000
v 2.522500 1.138000 0.212176
v 2.522500 0.960000 0.212176
v 2.612176 1.138000 0.122500
v 2.612176 0.960000 0.122500
v 2.645000 1.138000 0.000000
v 2.645000 0.960000 -0.000000
v 2.612176 1.138000 -0.122500
v 2.522500 1.138000 -0.212176
v 2.400000 1.138000 0.000000
v 2.400000 1.138000 -0.245000
v 2.277500 1.138000 -0.212176
v 2.187824 1.138000 -0.122500
v 2.155000 1.138000 -0.000000
v 2.187823 1.138000 0.122500
v 2.277500 1.138000 0.212176
v 2.400000 1.138000 0.245000
v 2.522500 1.138000 0.212176
v 2.612176 1.138000 0.122500
v 2.645000 1.138000 0.000000
v 1.812176 1.138000 -0.122500
v 1.812176 0.960000 -0.122500
v 1.722499 1.138000 -0.212176
v 1.722499 0.960000 -0.212176
v 1.599999 1.138000 -0.245000
v 1.599999 0.960000 -0.245000
v 1.477499 1.138000 -0.212176
v 1.477499 0.960000 -0.212176
v 1.387823 1.138000 -0.122500
v 1.387823 0.960000 -0.122500
v 1.354999 1.138000 -0.000000
v 1.354999 0.960000 -0.000000
v 1.387823 1.138000 0.122500
v 1.387823 0.960000 0.122500
v 1.477499 1.138000 0.212176
v 1.477499 0.960000 0.212176
v 1.599999 1.138000 0.245000
v 1.599999 0.960000 0.245000
v 1.722499 1.138000 0.212176
v 1.722499 0.960000 0.212176
v 1.812176 1.138000 0.122500
v 1.812176 0.960000 0.122500
v 1.844999 1.138000 0.000000
v 1.844999 0.960000 -0.000000
v 1.812176 1.138000 -0.122500
v 1.722499 1.138000 -0.212176
v 1.599999 1.138000 0.000000
v 1.599999 1.138000 -0.245000
v 1.477499 1.138000 -0.212176
v 1.387823 1.138000 -0.122500
v 1.354999 1.138000 -0.000000
v 1.387823 1.138000 0.122500
v 1.477499 1.138000 0.212176
v 1.599999 1.138000 0.245000
v 1.722499 1.138000 0.212176
v 1.812176 1.138000 0.122500
v 1.844999 1.138000 0.000000
v 1.012175 1.138000 -0.122500
v 1.012175 0.960000 -0.122500
v 0.922499 1.138000 -0.212176
v 0.922499 0.960000 -0.212176
v 0.799999 1.138000 -0.245000
v 0.799999 0.960000 -0.245000
v 0.677499 1.138000 -0.212176
v 0.677499 0.960000 -0.212176
v 0.587823 1.138000 -0.122500
v 0.587823 0.960000 -0.122500
v 0.554999 1.138000 -0.000000
v 0.554999 0.960000 -0.000000
v 0.587823 1.138000 0.122500
v 0.587823 0.960000 0.122500
v 0.677499 1.138000 0.212176
v 0.677499 0.960000 0.212176
v 0.799999 1.138000 0.245000
v 0.799999 0.960000 0.245000
v 0.922499 1.138000 0.212176
v 0.922499 0.960000 0.212176
v 1.012175 1.138000 0.122500
v 1.012175 0.960000 0.122500
v 1.044999 1.138000 0.000000
v 1.044999 0.960000 -0.000000
v 1.012175 1.138000 -0.122500
v 0.922499 1.138000 -0.212176
v 0.799999 1.138000 0.000000
v 0.799999 1.138000 -0.245000
v 0.677499 1.138000 -0.212176
v 0.587823 1.138000 -0.122500
v 0.554999 1.138000 -0.000000
v 0.587823 1.138000 0.122500
v 0.677499 1.138000 0.212176
v 0.799999 1.138000 0.245000
v 0.922499 1.138000 0.212176
v 1.012175 1.138000 0.122500
v 1.044999 1.138000 0.000000
v 0.212175 1.138000 -0.122500
v 0.212175 0.960000 -0.122500
v 0.122499 1.138000 -0.212176
v 0.122499 0.960000 -0.212176
v -0.000001 1.138000 -0.245000
v -0.000001 0.960000 -0.245000
v -0.122501 1.138000 -0.212176
v -0.122501 0.960000 -0.212176
v -0.212177 1.138000 -0.122500
v -0.212177 0.960000 -0.122500
v -0.245001 1.138000 -0.000000
v -0.245001 0.960000 -0.000000
v -0.212177 1.138000 0.122500
v -0.212177 0.960000 0.122500
v -0.122501 1.138000 0.212176
v -0.122501 0.960000 0.212176
v -0.000001 1.138000 0.245000
v -0.000001 0.960000 0.245000
v 0.122499 1.138000 0.212176
v 0.122499 0.960000 0.212176
v 0.212175 1.138000 0.122500
v 0.212175 0.960000 0.122500
v 0.244999 1.138000 0.000000
v 0.244999 0.960000 -0.000000
v 0.212175 1.138000 -0.122500
v 0.122499 1.138000 -0.212176
v -0.000001 1.138000 0.000000
v -0.000001 1.138000 -0.245000
v -0.122501 1.138000 -0.212176
v -0.212177 1.138000 -0.122500
v -0.245001 1.138000 -0.000000
v -0.212177 1.138000 0.122500
v -0.122501 1.138000 0.212176
v -0.000001 1.138000 0.245000
v 0.122499 1.138000 0.212176
v 0.212175 1.138000 0.122500
v 0.244999 1.138000 0.000000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn 0.0000 1.0000 0.0000
vn -0.0000 -1.0000 -0.0000
vn 0.0000 -0.0000 1.0000
vn 0.9071 -0.0000 -0.4210
vn 0.8181 -0.0000 -0.5751
vn 0.5751 -0.0000 -0.8181
vn 0.4210 -0.0000 -0.9071
vn 0.0890 0.0000 -0.9960
vn -0.0890 0.0000 -0.9960
vn -0.4210 0.0000 -0.9071
vn -0.5751 0.0000 -0.8181
vn -0.8181 0.0000 -0.5751
vn -0.9071 -0.0000 -0.4210
vn -0.9960 0.0000 -0.0890
vn -0.9960 -0.0000 0.0890
vn -0.9071 0.0000 0.4210
vn -0.8181 0.0000 0.5751
vn -0.5751 0.0000 0.8181
vn -0.4210 0.0000 0.9071
vn -0.0890 0.0000 0.9960
vn 0.0890 -0.0000 0.9960
vn 0.4210 -0.0000 0.9071
vn 0.5751 -0.0000 0.8181
vn 0.8181 -0.0000 0.5751
vn 0.9071 -0.0000 0.4210
vn 0.9960 -0.0000 0.0890
vn 0.9960 -0.0000 -0.0890
s 1
f 1//1 2//1 3//1
f 2//1 4//1 3//1
f 5//2 6//2 7//2
f 6//2 8//2 7//2
f 9//3 10//3 11//3
f 10//3 12//3 11//3
f 13//4 14//4 15//4
f 14//4 16//4 15//4
f 17//5 18//5 19//5
f 20//5 19//5 18//5
f 19//5 20//5 21//5
f 22//5 21//5 20//5
f 21//5 22//5 23//5
f 24//5 23//5 22//5
f 17//5 23//5 24//5
f 24//5 18//5 17//5
f 25//2 26//2 27//2
f 26//2 28//2 27//2
f 29//3 30//3 31//3
f 30//3 32//3 31//3
f 33//1 34//1 35//1
f 34//1 36//1 35//1
f 37//6 38//6 39//6
f 38//6 40//6 39//6
f 41//5 42//5 43//5
f 42//5 44//5 43//5
f 45//7 46//8 47//9
f 46//8 48//10 47//9
f 47//9 48//10 49//11
f 48//10 50//12 49//11
f 49//11 50//12 51//13
f 50//12 52//14 51//13
f 51//13 52//14 53//15
f 52//14 54//16 53//15
f 53//15 54//16 55//17
f 54//16 56//18 55//17
f 55//17 56//18 57//19
f 56//18 58//20 57//19
f 57//19 58//20 59//21
f 58//20 60//22 59//21
f 59//21 60//22 61//23
f 60//22 62//24 61//23
f 61//23 62//24 63//25
f 62//24 64//26 63//25
f 63//25 64//26 65//27
f 64//26 66//28 65//27
f 65//27 66//28 67//29
f 66//28 68//30 67//29
f 67//29 68//30 45//7
f 68//30 46//8 45//7
f 69//4 70//4 71//4
f 70//4 72//4 71//4
f 72//4 73//4 71//4
f 73//4 74//4 71//4
f 74//4 75//4 71//4
f 75//4 76//4 71//4
f 76//4 77//4 71//4
f 77//4 78//4 71//4
f 78//4 79//4 71//4
f 79//4 80//4 71//4
f 80//4 81//4 71//4
f 81//4 69//4 71//4
f 82//7 83//8 84//9
f 83//8 85//10 84//9
f 84//9 85//10 86//11
f 85//10 87//12 86//11
f 86//11 87//12 88//13
f 87//12 89//14 88//13
f 88//13 89//14 90//15
f 89//14 91//16 90//15
f 90//15 91//16 92//17
f 91//16 93//18 92//17
f 92//17 93//18 94//19
f 93//18 95//20 94//19
f 94//19 95//20 96//21
f 95//20 97//22 96//21
f 96//21 97//22 98//23
f 97//22 99//24 98//23
f 98//23 99//24 100//25
f 99//24 101//26 100//25
f 100//25 101//26 102//27
f 101//26 103//28 102//27
f 102//27 103//28 104//29
f 103//28 105//30 104//29
f 104//29 105//30 82//7
f 105//30 83//8 82//7
f 106//4 107//4 108//4
f 107//4 109//4 108//4
f 109//4 110//4 108//4
f 110//4 111//4 108//4
f 111//4 112//4 108//4
f 112//4 113//4 108//4
f 113//4 114//4 108//4
f 114//4 115//4 108//4
f 115//4 116//4 108//4
f 116//4 117//4 108//4
f 117//4 118//4 108//4
f 118//4 106//4 108//4
f 119//7 120//8 121//9
f 120//8 122//10 121//9
f 121//9 122//10 123//11
f 122//10 124//12 123//11
f 123//11 124//12 125//13
f 124//12 126//14 125//13
f 125//13 126//14 127//15
f 126//14 128//16 127//15
f 127//15 128//16 129//17
f 128//16 130//18 129//17
f 129//17 130//18 131//19
f 130//18 132//20 131//19
f 131//19 132//20 133//21
f 132//20 134//22 133//21
f 133//21 134//22 135//23
f 134//22 136//24 135//23
f 135//23 136//24 137//25
f 136//24 138//26 137//25
f 137//25 138//26 139//27
f 138//26 140//28 139//27
f 139//27 140//28 141//29
f 140//28 142//30 141//29
f 141//29 142//30 119//7
f 142//30 120//8 119//7
f 143//4 144//4 145//4
f 144//4 146//4 145//4
f 146//4 147//4 145//4
f 147//4 148//4 145//4
f 148//4 149//4 145//4
f 149//4 150//4 145//4
f 150//4 151//4 145//4
f 151//4 152//4 145//4
f 152//4 153//4 145//4
f 153//4 154//4 145//4
f 154//4 155//4 145//4
f 155//4 143//4 145//4
f 156//7 157//8 158//9
f 157//8 159//10 158//9
f 158//9 159//10 160//11
f 159//10 161//12 160//11
f 160//11 161//12 162//13
f 161//12 163//14 162//13
f 162//13 163//14 164//15
f 163//14 165//16 164//15
f 164//15 165//16 166//17
f 165//16 167//18 166//17
f 166//17 167//18 168//19
f 167//18 169//20 168//19
f 168//19 169//20 170//21
f 169//20 171//22 170//21
f 170//21 171//22 172//23
f 171//22 173//24 172//23
f 172//23 173//24 174//25
f 173//24 175//26 174//25
f 174//25 175//26 176//27
f 175//26 177//28 176//27
f 176//27 177//28 178//29
f 177//28 179//30 178//29
f 178//29 179//30 156//7
f 179//30 157//8 156//7
f 180//4 181//4 182//4
f 181//4 183//4 182//4
f 183//4 184//4 182//4
f 184//4 185//4 182//4
f 185//4 186//4 182//4
f 186//4 187//4 182//4
f 187//4 188//4 182//4
f 188//4 189//4 182//4
f 189//4 190//4 182//4
f 190//4 191//4 182//4
f 191//4 192//4 182//4
f 192//4 180//4 182//4
f 193//7 194//8 195//9
f 194//8 196//10 195//9
f 195//9 196//10 197//11
f 196//10 198//12 197//11
f 197//11 198//12 199//13
f 198//12 200//14 199//13
f 199//13 200//14 201//15
f 200//14 202//16 201//15
f 201//15 202//16 203//17
f 202//16 204//18 203//17
f 203//17 204//18 205//19
f 204//18 206//20 205//19
f 205//19 206//20 207//21
f 206//20 208//22 207//21
f 207//21 208//22 209//23
f 208//22 210//24 209//23
f 209//23 210//24 211//25
f 210//24 212//26 211//25
f 211//25 212//26 213//27
f 212//26 214//28 213//27
f 213//27 214//28 215//29
f 214//28 216//30 215//29
f 215//29 216//30 193//7
f 216//30 194//8 193//7
f 217//4 218//4 219//4
f 218//4 220//4 219//4
f 220//4 221//4 219//4
f 221//4 222//4 219//4
f 222//4 223//4 219//4
f 223//4 224//4 219//4
f 224//4 225//4 219//4
f 225//4 226//4 219//4
f 226//4 227//4 219//4
f 227//4 228//4 219//4
f 228//4 229//4 219//4
f 229//4 217//4 219//4
f 230//7 231//8 232//9
f 231//8 233//10 232//9
f 232//9 233//10 234//11
f 233//10 235//12 234//11
f 234//11 235//12 236//13
f 235//12 237//14 236//13
f 236//13 237//14 238//15
f 237//14 239//16 238//15
f 238//15 239//16 240//17
f 239//16 241//18 240//17
f 240//17 241//18 242//19
f 241//18 243//20 242//19
f 242//19 243//20 244//21
f 243//20 245//22 244//21
f 244//21 245//22 246//23
f 245//22 247//24 246//23
f 246//23 247//24 248//25
f 247//24 249//26 248//25
f 248//25 249//26 250//27
f 249//26 251//28 250//27
f 250//27 251//28 252//29
f 251//28 253//30 252//29
f 252//29 253//30 230//7
f 253//30 231//8 230//7
f 254//4 255//4 256//4
f 255//4 257//4 256//4
f 257//4 258//4 256//4
f 258//4 259//4 256//4
f 259//4 260//4 256//4
f 260//4 261//4 256//4
f 261//4 262//4 256//4
f 262//4 263//4 256//4
f 263//4 264//4 256//4
f 264//4 265//4 256//4
f 265//4 266//4 256//4
f 266//4 254//4 256//4


顺便说一句,数组是浮点型和整数型,特别是:

int verticesLength = some-value-here;
int indicesLength = some-value-here;
float[] vertices = new float[verticesLength * 3];
float[] normals = new float[verticesLength * 3];
float[] uvs = new float[verticesLength * 2];
int[] indices = new int[indicesLength * 3];


我也在这里发布了第二个obj文件(较长的一个)的输出,该输出是由我试图模拟的CSharp应用程序生成的那个法线数组的-它很长,但是如果您注意到它如何改变法线的长度数组(第二行)为顶点数组的长度(不幸的是,这是文件所使用的应用程序必须满足的要求):

1.0 0.0 0.0 -0.0 -1.0 -0.0 1.0 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 -1.0 -0.0 1.0 0.0 0.0 -0.0 0.0 -1.0 0.0 1.0 0.0 -1.0 0.0 0.0 -0.0 -1.0 -0.0 -0.0 -1.0 -0.0 -0.0 0.0 -1.0 1.0 0.0 0.0 0.0 -0.0 1.0 -1.0 0.0 0.0 0.0 1.0 0.0 -1.0 0.0 0.0 -0.0 0.0 -1.0 -0.0 -1.0 -0.0 -0.0 -1.0 -0.0 1.0 0.0 0.0 -1.0 0.0 0.0 -0.0 0.0 -1.0 0.0 1.0 0.0 -0.0 -1.0 -0.0 -1.0 0.0 0.0 -0.0 -1.0 -0.0 -1.0 0.0 0.0 -0.0 0.0 -1.0 0.0 -0.0 1.0 -1.0 0.0 0.0 -0.0 -1.0 -0.0 -1.0 0.0 0.0 -0.0 0.0 -1.0 0.0 -0.0 1.0 -0.0 -1.0 -0.0 -0.0 0.0 -1.0 1.0 0.0 0.0 0.0 -0.0 1.0 -0.0 -1.0 -0.0 1.0 0.0 0.0 -0.0 -1.0 -0.0 0.9071 -0.0 -0.421 0.8181 -0.0 -0.5751 0.5751 -0.0 -0.8181 0.421 -0.0 -0.9071 0.089 0.0 -0.996 -0.089 0.0 -0.996 -0.421 0.0 -0.9071 -0.5751 0.0 -0.8181 -0.8181 0.0 -0.5751 -0.9071 -0.0 -0.421 -0.996 0.0 -0.089 -0.996 -0.0 0.089 -0.9071 0.0 0.421 -0.8181 0.0 0.5751 -0.5751 0.0 0.8181 -0.421 0.0 0.9071 -0.089 0.0 0.996 0.089 -0.0 0.996 0.421 -0.0 0.9071 0.5751 -0.0 0.8181 0.8181 -0.0 0.5751 0.9071 -0.0 0.421 0.996 -0.0 0.089 0.996 -0.0 -0.089 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.9071 -0.0 -0.421 0.8181 -0.0 -0.5751 0.5751 -0.0 -0.8181 0.421 -0.0 -0.9071 0.089 0.0 -0.996 -0.089 0.0 -0.996 -0.421 0.0 -0.9071 -0.5751 0.0 -0.8181 -0.8181 0.0 -0.5751 -0.9071 -0.0 -0.421 -0.996 0.0 -0.089 -0.996 -0.0 0.089 -0.9071 0.0 0.421 -0.8181 0.0 0.5751 -0.5751 0.0 0.8181 -0.421 0.0 0.9071 -0.089 0.0 0.996 0.089 -0.0 0.996 0.421 -0.0 0.9071 0.5751 -0.0 0.8181 0.8181 -0.0 0.5751 0.9071 -0.0 0.421 0.996 -0.0 0.089 0.996 -0.0 -0.089 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.9071 -0.0 -0.421 0.8181 -0.0 -0.5751 0.5751 -0.0 -0.8181 0.421 -0.0 -0.9071 0.089 0.0 -0.996 -0.089 0.0 -0.996 -0.421 0.0 -0.9071 -0.5751 0.0 -0.8181 -0.8181 0.0 -0.5751 -0.9071 -0.0 -0.421 -0.996 0.0 -0.089 -0.996 -0.0 0.089 -0.9071 0.0 0.421 -0.8181 0.0 0.5751 -0.5751 0.0 0.8181 -0.421 0.0 0.9071 -0.089 0.0 0.996 0.089 -0.0 0.996 0.421 -0.0 0.9071 0.5751 -0.0 0.8181 0.8181 -0.0 0.5751 0.9071 -0.0 0.421 0.996 -0.0 0.089 0.996 -0.0 -0.089 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.9071 -0.0 -0.421 0.8181 -0.0 -0.5751 0.5751 -0.0 -0.8181 0.421 -0.0 -0.9071 0.089 0.0 -0.996 -0.089 0.0 -0.996 -0.421 0.0 -0.9071 -0.5751 0.0 -0.8181 -0.8181 0.0 -0.5751 -0.9071 -0.0 -0.421 -0.996 0.0 -0.089 -0.996 -0.0 0.089 -0.9071 0.0 0.421 -0.8181 0.0 0.5751 -0.5751 0.0 0.8181 -0.421 0.0 0.9071 -0.089 0.0 0.996 0.089 -0.0 0.996 0.421 -0.0 0.9071 0.5751 -0.0 0.8181 0.8181 -0.0 0.5751 0.9071 -0.0 0.421 0.996 -0.0 0.089 0.996 -0.0 -0.089 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.9071 -0.0 -0.421 0.8181 -0.0 -0.5751 0.5751 -0.0 -0.8181 0.421 -0.0 -0.9071 0.089 0.0 -0.996 -0.089 0.0 -0.996 -0.421 0.0 -0.9071 -0.5751 0.0 -0.8181 -0.8181 0.0 -0.5751 -0.9071 -0.0 -0.421 -0.996 0.0 -0.089 -0.996 -0.0 0.089 -0.9071 0.0 0.421 -0.8181 0.0 0.5751 -0.5751 0.0 0.8181 -0.421 0.0 0.9071 -0.089 0.0 0.996 0.089 -0.0 0.996 0.421 -0.0 0.9071 0.5751 -0.0 0.8181 0.8181 -0.0 0.5751 0.9071 -0.0 0.421 0.996 -0.0 0.089 0.996 -0.0 -0.089 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.9071 -0.0 -0.421 0.8181 -0.0 -0.5751 0.5751 -0.0 -0.8181 0.421 -0.0 -0.9071 0.089 0.0 -0.996 -0.089 0.0 -0.996 -0.421 0.0 -0.9071 -0.5751 0.0 -0.8181 -0.8181 0.0 -0.5751 -0.9071 -0.0 -0.421 -0.996 0.0 -0.089 -0.996 -0.0 0.089 -0.9071 0.0 0.421 -0.8181 0.0 0.5751 -0.5751 0.0 0.8181 -0.421 0.0 0.9071 -0.089 0.0 0.996 0.089 -0.0 0.996 0.421 -0.0 0.9071 0.5751 -0.0 0.8181 0.8181 -0.0 0.5751 0.9071 -0.0 0.421 0.996 -0.0 0.089 0.996 -0.0 -0.089 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0


更新:因此,我通过从索引部分(f)创建v / vn对列表来实现部分成功,我认为它基本上是说顶点线v与法线vn相关联,然后对列表进行排序,删除重复项并最终在顶点数组的长度上重新创建了新的normals数组,所有这些都像这样,但是无论如何它仍然有些“关闭”:

//indicesPairs is CopyOnWriteArrayList<int[]> filled during obj file parsing
Collections.sort(indicesPairs, (o1, o2) -> {
    for (int i = 0; i < o1.length; i++) {
        if (o1[i] < o2[i]) {
            return -1;
        }
        if (o1[i] > o2[i]) {
            return 1;
        }
    }
    return 0;
});
CopyOnWriteArrayList<Float> normalsNew = new CopyOnWriteArrayList<>();
for (int i = 0; i < indicesPairs.size(); i++) {
    int normalsBlock = indicesPairs.get(i)[1] - 1;
    normalsNew.add(normals.get(normalsBlock * 3));
    normalsNew.add(normals.get(normalsBlock * 3) + 1);
    normalsNew.add(normals.get(normalsBlock * 3) + 2);
}


所以我想我现在需要的是对那些法线的某种校正,这些法线现在在应该有阴影的地方产生某种光,例如……但是该怎么做以及什么样的校正?

最佳答案

终于我自己解决了:经过大量测试,我发现问题的“更新”部分中的部分解决方案(最后)实际上原则上是正确的,唯一的问题是我在选择正确的数组索引时犯了错误。 )。

因此,使法线成为顶点长度的最终解决方案是这样(可以理解,在OBJ文件中需要定义一些法线,并且索引/面“ f”的形式必须同时包含顶点“ v”和法线“ vn”值) f v//vn的值,或者如果对象具有uvs,则f v/vt/vn ...如果f的值只有一个,例如f some-integer-here,则OBJ文件应在顶点的确切长度上定义法线,因此无需执行此过程因为它已经有预期的长度(对于我的问题,此长度是预期的意思)-如果不是,则很可能是OBJ文件本身有问题):

// "normals" is CopyOnWriteArrayList<Float> filled with actual normals defined in OBJ file
// "indicesPairs" is CopyOnWriteArrayList<int[]> filled during OBJ file parsing
// it takes "f v/vt/vn" or "f v//vn" and makes array of 1st & 3rd value "new int[]{v, vn}"
// both values are lowered by 1 as index starts at 0, not 1
// also any duplicate is removed so it has the right expected length: "vertices.length/3"
Collections.sort(indicesPairs, (o1, o2) -> {
    for (int i = 0; i < o1.length; i++) {
        if (o1[i] < o2[i]) {
            return -1;
        }
        if (o1[i] > o2[i]) {
            return 1;
        }
    }
    return 0;
});

for (int i = 0; i < indicesPairs.size(); i++) {

    int normalsBlock = indicesPairs.get(i)[1];

    float n1 = normals.get(normalsBlock * 3);
    float n2 = normals.get((normalsBlock * 3) + 1);
    float n3 = normals.get((normalsBlock * 3) + 2);

    normalsNew.add(n1);
    normalsNew.add(n2);
    normalsNew.add(n3);
}

关于java - JAVA,使法线数组具有顶点数组的长度(来自已解析的OBJ文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59968032/

相关文章:

java多线程和mysql

javascript - 如何通过另一个对象数组过滤对象数组

C# Vector3 四元数从一个方向旋转到下方表面的法线方向,但仅旋转百分比

javafx - TriangleMesh JavaFX 中 getNormals() 方法的用途是什么

java - xcodebuild 打印了太多日志

java - Android:覆盖 Google map v2 最大缩放

c - 为什么我们需要将数组初始化为 0(空)?

php - 替代值应存储在 php 数组中的替代位置

c# - 计算以接缝结束的 2 个网格之间的法线

java - 在此程序中,当我添加更多标签时,已准备好的标签不会显示。