【发布时间】:2020-05-15 00:09:31
【问题描述】:
我正在尝试重现 CSharp 应用程序的 OBJ 文件解析,该应用程序采用 obj 文件并使用其独特的内部结构(基于该 obj 文件)制作另一个文件,并将其保存到具有唯一扩展名的文件中 - 它不是 1 :1 那个 obj 文件的副本:它只需要顶点、法线、uvs(如果有的话)和索引来制作它们的数组并用它来制作几个不同的东西(这对我的问题根本不重要,但我还是要告诉它展示一下它的作用)。
我能够通过在我的 JAVA 应用程序中以二进制模式逐字节查看生成的文件(遍历它)并通过试图理解其背后的逻辑的纯尝试/猜测过程来做到这一点,我成功地模拟了它 - 漫长的过程我可以告诉你。
现在,我已经成功地在我的 JAVA 应用程序中“模拟”了该应用程序行为,该应用程序现在能够从源 obj 文件生成该特殊文件,唯一的例外是我无法理解。
在 OBJ 文件中,有不同数量的顶点和法线(例如,它可以有 266*3 顶点,但只有 30*3 法线),但是我试图模拟的 CSharp 应用程序能够以某种方式生成法线这些顶点的长度,即两个数组具有相同的长度。而且我找不到该计算背后的任何逻辑!
首先对于小的 OBJ 文件,我认为它只是采用这些法线值并将它们简单地复制到顶点数组的长度,当我有 5 * 3 个顶点和 3 个法线时,它以某种方式奇迹般地工作,但如果它“不相等”则不会",也就是vertices.length/normals.length != int的时候。
这两个(顶点/法线)之间是否存在某种相关性,使 CSharp 应用程序能够将法线数组长度“拉伸/填充”到该 vertices.length 的长度?
这是两个 OBJ 文件作为示例(是的:这些正是我在 CSharp 程序中使用的那些 OBJ 文件,所以它们的结构是否“不正确”并不重要——这不是我的优点问题,它对我要问的问题没有影响)+我也不是想出使法线到顶点长度的想法的人,尽管它更短(谈论它们各自的数组),而且,顺便说一句,这很简单使用它生成的特殊文件的软件的要求,所以我理解他为什么这样做 - 我只是想重现我无法理解原作者如何在他的 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) 总是等于一些浮点数)从未使用过该技术(因为它只需要整数,而不是小数浮点数) 这就是我挠头解决它的原因
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];
我在这里还发布了由我试图模拟的 CSharp 应用程序生成的法线数组的第二个 obj 文件(较长的文件)的输出 - 它很长,但如果你能注意到它是如何改变长度的法线数组(第 2 行)的长度是顶点数组的长度(不幸的是,这是使用文件的应用程序需要满足的要求):
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,然后对列表进行排序,删除重复项,最后在顶点数组的长度上重新创建新的法线数组,所有这些都是这样的,但无论如何它仍然有点“关闭”:
//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 文件也应该有一个多边形数组,每个多边形包含三个或更多顶点。在 3d 图形中,多边形有法线,顶点没有。
-
@NomadMaker 是对的。您在问题中说“能够制作这些顶点的长度法线”,但这听起来不合逻辑。法线是在多边形上定义的,而不是在顶点上。无论如何,如果你坚持计算顶点的法线,这可以通过“平均”与每个顶点相邻的所有表面的法线来尝试估计法线。
-
@NomadMaker 这两个 obj 是标准 Blender v2.8 obj 导出,所以我不知道你在说什么(我只省略了前导标题和网格的名称,这对我的问题并不重要),那里有什么问题(可能什么都没有)...或者你是说 Blender OBJ 导出器有错误?
-
Blender obj 导出到 OBJ 工作正常,这意味着文件包含多边形信息。多边形只是 3 或 4 个(有时更多)顶点。
-
是的,我知道,但是等一下,您的第一反应是什么?我以为您是在说 obj 文件结构有问题...看,如果普遍认为如上所示的 OBJ 文件是多边形,我正在尽力理解您在说什么?
标签: java arrays normals vertices .obj