Load multiple meshes from obj file

This commit is contained in:
2017-02-27 19:15:00 -05:00
parent 7259f5daf2
commit 1c5491a2c5
5 changed files with 567 additions and 9 deletions

View File

@@ -13,6 +13,8 @@ namespace Diamond
public SubArray<T> Vertices;
public PrimitiveType Primitive;
public string Name { get; set; }
private static VertexDataInfo tVdi;
private static List<VertexPointerAttribute> attribs;
@@ -84,10 +86,11 @@ namespace Diamond
return new Mesh<T>(vertices);
}
public static Mesh<ObjVertex> FromObj(string file)
public static Mesh<ObjVertex>[] FromObj(string file)
{
var lines = File.ReadAllLines(file);
var meshes = new List<Mesh<ObjVertex>>();
var vs = new List<Vector3>();
var vts = new List<Vector2>();
var vns = new List<Vector3>();
@@ -111,7 +114,7 @@ namespace Diamond
case "vt":
var vt = new Vector2(
float.Parse(items[1]),
1-float.Parse(items[2]));
1 - float.Parse(items[2]));
vts.Add(vt);
break;
case "vn":
@@ -125,19 +128,27 @@ namespace Diamond
for (var i = 1; i < 4; i++)
{
var inds = items[i].Split('/');
var vi = vs[int.Parse(inds[0]) - 1];
var vti = vts[int.Parse(inds[1]) - 1];
var vni = vns[int.Parse(inds[2]) - 1];
var vi = inds[0] == "" ? Vector3.Zero : vs[int.Parse(inds[0]) - 1];
var vti = inds[1] == "" ? Vector2.Zero : vts[int.Parse(inds[1]) - 1];
var vni = inds[2] == "" ? Vector3.Zero : vns[int.Parse(inds[2]) - 1];
var f = new ObjVertex(vi, vti, vni);
faces.Add(f);
}
break;
case "o":
if (faces.Count > 0)
{
meshes.Add(new Mesh<ObjVertex>(faces.ToArray()));
faces.Clear();
}
break;
}
}
var vertices = faces.ToArray();
if (faces.Count > 0)
meshes.Add(new Mesh<ObjVertex>(faces.ToArray()));
return new Mesh<ObjVertex>(vertices);
return meshes.ToArray();
}
public static T[] Join<T>(params Mesh<T>[] meshes) where T : struct => Join((IEnumerable<Mesh<T>>) meshes);

View File

@@ -89,7 +89,7 @@ namespace hexworld
_cubeMesh = Mesh.FromJson<Vertex>(@"res\data_vert_cubes.json");
_panelMesh = Mesh.FromJson<Vertex>(@"res\data_vert_panels.json");
_sidesMesh = Mesh.FromJson<Vertex>(@"res\data_vert_sides.json");
_objMesh = Mesh.FromObj(@"res\table.obj");
_objMesh = Mesh.FromObj(@"res\door.obj")[0];
_grassTiles = new SubArray<Tile>(
JsonConvert.DeserializeObject<Tile[]>(File.ReadAllText(@"res\data_tile_grass.json")));

View File

@@ -76,6 +76,9 @@
</None>
<None Include="OpenTK.dll.config" />
<None Include="packages.config" />
<None Include="res\door.obj">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="res\obj.fs.glsl">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

544
hexworld/res/door.obj Normal file
View File

@@ -0,0 +1,544 @@
# Blender v2.78 (sub 0) OBJ File: 'door.blend'
# www.blender.org
o Cube.008_Cube.032
v 0.500000 0.500000 0.000000
v 0.500000 0.500000 0.375000
v 1.500000 0.500000 0.000000
v 1.500000 0.500000 0.375000
v 0.500000 -0.500000 0.000000
v 0.500000 -0.500000 0.375000
v 1.500000 -0.500000 0.000000
v 1.500000 -0.500000 0.375000
v 0.625000 0.375000 0.375000
v 0.625000 0.375000 0.625000
v 1.375000 0.375000 0.375000
v 1.375000 0.375000 0.625000
v 0.625000 -0.375000 0.375000
v 0.625000 -0.375000 0.625000
v 1.375000 -0.375000 0.375000
v 1.375000 -0.375000 0.625000
v 0.750000 0.250000 0.625000
v 0.750000 0.250000 1.000000
v 1.250000 0.250000 0.625000
v 1.250000 0.250000 1.000000
v 0.750000 -0.250000 0.625000
v 0.750000 -0.250000 1.000000
v 1.250000 -0.250000 0.625000
v 1.250000 -0.250000 1.000000
v 0.500000 0.125000 0.375000
v 0.500000 0.125000 1.000000
v 0.750000 0.125000 0.375000
v 0.750000 0.125000 1.000000
v 0.500000 -0.125000 0.375000
v 0.500000 -0.125000 1.000000
v 0.750000 -0.125000 0.375000
v 0.750000 -0.125000 1.000000
vn -0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -0.0000 0.0000 1.0000
vn -1.0000 -0.0000 0.0000
s off
f 2//1 3//1 1//1
f 4//2 7//2 3//2
f 8//3 5//3 7//3
f 7//4 1//4 3//4
f 4//5 6//5 8//5
f 10//1 11//1 9//1
f 12//2 15//2 11//2
f 16//3 13//3 15//3
f 14//6 9//6 13//6
f 12//5 14//5 16//5
f 18//1 19//1 17//1
f 20//2 23//2 19//2
f 24//3 21//3 23//3
f 22//6 17//6 21//6
f 26//1 27//1 25//1
f 32//3 29//3 31//3
f 30//6 25//6 29//6
f 32//5 26//5 30//5
f 5//6 2//6 1//6
f 2//1 4//1 3//1
f 4//2 8//2 7//2
f 8//3 6//3 5//3
f 7//4 5//4 1//4
f 4//5 2//5 6//5
f 10//1 12//1 11//1
f 12//2 16//2 15//2
f 16//3 14//3 13//3
f 14//6 10//6 9//6
f 12//5 10//5 14//5
f 18//1 20//1 19//1
f 20//2 24//2 23//2
f 24//3 22//3 21//3
f 22//6 18//6 17//6
f 26//1 28//1 27//1
f 32//3 30//3 29//3
f 30//6 26//6 25//6
f 32//5 28//5 26//5
f 5//6 6//6 2//6
o Cube.007_Cube.031
v 0.750000 0.250000 1.000000
v 0.750000 0.250000 2.000000
v 1.250000 0.250000 1.000000
v 1.250000 0.250000 2.000000
v 0.750000 -0.250000 1.000000
v 0.750000 -0.250000 2.000000
v 1.250000 -0.250000 1.000000
v 1.250000 -0.250000 2.000000
v 0.500000 0.125000 1.000000
v 0.500000 0.125000 2.000000
v 0.750000 0.125000 1.000000
v 0.750000 0.125000 2.000000
v 0.500000 -0.125000 1.000000
v 0.500000 -0.125000 2.000000
v 0.750000 -0.125000 1.000000
v 0.750000 -0.125000 2.000000
vn -0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 -0.0000 0.0000
s off
f 34//7 35//7 33//7
f 36//8 39//8 35//8
f 40//9 37//9 39//9
f 38//10 33//10 37//10
f 42//7 43//7 41//7
f 48//9 45//9 47//9
f 46//10 41//10 45//10
f 34//7 36//7 35//7
f 36//8 40//8 39//8
f 40//9 38//9 37//9
f 38//10 34//10 33//10
f 42//7 44//7 43//7
f 48//9 46//9 45//9
f 46//10 42//10 41//10
o Cube.006_Cube.030
v 0.500000 0.125000 3.000000
v 0.500000 0.125000 3.250000
v 0.750000 0.125000 3.000000
v 0.750000 0.125000 3.250000
v 0.500000 -0.125000 3.000000
v 0.500000 -0.125000 3.250000
v 0.750000 -0.125000 3.000000
v 0.750000 -0.125000 3.250000
v 0.500000 0.250000 3.250000
v 0.500000 0.250000 3.750000
v 1.250000 0.250000 3.250000
v 1.250000 0.250000 3.750000
v 0.500000 -0.250000 3.250000
v 0.500000 -0.250000 3.750000
v 1.250000 -0.250000 3.250000
v 1.250000 -0.250000 3.750000
v 0.625000 0.375000 3.125000
v 0.625000 0.375000 3.375000
v 1.375000 0.375000 3.125000
v 1.375000 0.375000 3.375000
v 0.625000 -0.375000 3.125000
v 0.625000 -0.375000 3.375000
v 1.375000 -0.375000 3.125000
v 1.375000 -0.375000 3.375000
v 0.750000 0.250000 3.000000
v 0.750000 0.250000 3.125000
v 1.250000 0.250000 3.000000
v 1.250000 0.250000 3.125000
v 0.750000 -0.250000 3.000000
v 0.750000 -0.250000 3.125000
v 1.250000 -0.250000 3.000000
v 1.250000 -0.250000 3.125000
vn -0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 -0.0000 0.0000
s off
f 50//11 51//11 49//11
f 52//12 55//12 51//12
f 56//13 53//13 55//13
f 58//11 59//11 57//11
f 60//12 63//12 59//12
f 64//13 61//13 63//13
f 59//14 61//14 57//14
f 60//15 62//15 64//15
f 66//11 67//11 65//11
f 68//12 71//12 67//12
f 72//13 69//13 71//13
f 70//16 65//16 69//16
f 71//14 65//14 67//14
f 68//15 70//15 72//15
f 74//11 75//11 73//11
f 76//12 79//12 75//12
f 80//13 77//13 79//13
f 78//16 73//16 77//16
f 50//11 52//11 51//11
f 52//12 56//12 55//12
f 56//13 54//13 53//13
f 58//11 60//11 59//11
f 60//12 64//12 63//12
f 64//13 62//13 61//13
f 59//14 63//14 61//14
f 60//15 58//15 62//15
f 66//11 68//11 67//11
f 68//12 72//12 71//12
f 72//13 70//13 69//13
f 70//16 66//16 65//16
f 71//14 69//14 65//14
f 68//15 66//15 70//15
f 74//11 76//11 75//11
f 76//12 80//12 79//12
f 80//13 78//13 77//13
f 78//16 74//16 73//16
o Cube.000_Cube.029
v 0.750000 0.250000 2.000000
v 0.750000 0.250000 3.000000
v 1.250000 0.250000 2.000000
v 1.250000 0.250000 3.000000
v 0.750000 -0.250000 2.000000
v 0.750000 -0.250000 3.000000
v 1.250000 -0.250000 2.000000
v 1.250000 -0.250000 3.000000
v 0.500000 0.125000 2.000000
v 0.500000 0.125000 3.000000
v 0.750000 0.125000 2.000000
v 0.750000 0.125000 3.000000
v 0.500000 -0.125000 2.000000
v 0.500000 -0.125000 3.000000
v 0.750000 -0.125000 2.000000
v 0.750000 -0.125000 3.000000
vn -0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 -0.0000 0.0000
s off
f 82//17 83//17 81//17
f 84//18 87//18 83//18
f 88//19 85//19 87//19
f 86//20 81//20 85//20
f 90//17 91//17 89//17
f 96//19 93//19 95//19
f 94//20 89//20 93//20
f 82//17 84//17 83//17
f 84//18 88//18 87//18
f 88//19 86//19 85//19
f 86//20 82//20 81//20
f 90//17 92//17 91//17
f 96//19 94//19 93//19
f 94//20 90//20 89//20
o Cube.005_Cube.024
v 0.500000 -0.250000 3.250000
v 0.500000 -0.250000 3.750000
v -0.500000 -0.250000 3.250000
v -0.500000 -0.250000 3.750000
v 0.500000 0.250000 3.250000
v 0.500000 0.250000 3.750000
v -0.500000 0.250000 3.250000
v -0.500000 0.250000 3.750000
v 0.500000 -0.125000 3.000000
v 0.500000 -0.125000 3.250000
v -0.500000 -0.125000 3.000000
v -0.500000 -0.125000 3.250000
v 0.500000 0.125000 3.000000
v 0.500000 0.125000 3.250000
v -0.500000 0.125000 3.000000
v -0.500000 0.125000 3.250000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
s off
f 98//21 99//21 97//21
f 104//22 101//22 103//22
f 103//23 97//23 99//23
f 100//24 102//24 104//24
f 106//21 107//21 105//21
f 112//22 109//22 111//22
f 111//23 105//23 107//23
f 98//21 100//21 99//21
f 104//22 102//22 101//22
f 103//23 101//23 97//23
f 100//24 98//24 102//24
f 106//21 108//21 107//21
f 112//22 110//22 109//22
f 111//23 109//23 105//23
o Cube.004_Cube.022
v -0.750000 -0.250000 2.000000
v -0.750000 -0.250000 3.000000
v -1.250000 -0.250000 2.000000
v -1.250000 -0.250000 3.000000
v -0.750000 0.250000 2.000000
v -0.750000 0.250000 3.000000
v -1.250000 0.250000 2.000000
v -1.250000 0.250000 3.000000
v -0.500000 -0.125000 2.000000
v -0.500000 -0.125000 3.000000
v -0.750000 -0.125000 2.000000
v -0.750000 -0.125000 3.000000
v -0.500000 0.125000 2.000000
v -0.500000 0.125000 3.000000
v -0.750000 0.125000 2.000000
v -0.750000 0.125000 3.000000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
s off
f 114//25 115//25 113//25
f 116//26 119//26 115//26
f 120//27 117//27 119//27
f 118//28 113//28 117//28
f 122//25 123//25 121//25
f 128//27 125//27 127//27
f 126//28 121//28 125//28
f 114//25 116//25 115//25
f 116//26 120//26 119//26
f 120//27 118//27 117//27
f 118//28 114//28 113//28
f 122//25 124//25 123//25
f 128//27 126//27 125//27
f 126//28 122//28 121//28
o Cube.002_Cube.021
v -0.500000 -0.125000 3.000000
v -0.500000 -0.125000 3.250000
v -0.750000 -0.125000 3.000000
v -0.750000 -0.125000 3.250000
v -0.500000 0.125000 3.000000
v -0.500000 0.125000 3.250000
v -0.750000 0.125000 3.000000
v -0.750000 0.125000 3.250000
v -0.500000 -0.250000 3.250000
v -0.500000 -0.250000 3.750000
v -1.250000 -0.250000 3.250000
v -1.250000 -0.250000 3.750000
v -0.500000 0.250000 3.250000
v -0.500000 0.250000 3.750000
v -1.250000 0.250000 3.250000
v -1.250000 0.250000 3.750000
v -0.625000 -0.375000 3.125000
v -0.625000 -0.375000 3.375000
v -1.375000 -0.375000 3.125000
v -1.375000 -0.375000 3.375000
v -0.625000 0.375000 3.125000
v -0.625000 0.375000 3.375000
v -1.375000 0.375000 3.125000
v -1.375000 0.375000 3.375000
v -0.750000 -0.250000 3.000000
v -0.750000 -0.250000 3.125000
v -1.250000 -0.250000 3.000000
v -1.250000 -0.250000 3.125000
v -0.750000 0.250000 3.000000
v -0.750000 0.250000 3.125000
v -1.250000 0.250000 3.000000
v -1.250000 0.250000 3.125000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
s off
f 130//29 131//29 129//29
f 132//30 135//30 131//30
f 136//31 133//31 135//31
f 138//29 139//29 137//29
f 140//30 143//30 139//30
f 144//31 141//31 143//31
f 143//32 137//32 139//32
f 140//33 142//33 144//33
f 146//29 147//29 145//29
f 148//30 151//30 147//30
f 152//31 149//31 151//31
f 150//34 145//34 149//34
f 151//32 145//32 147//32
f 148//33 150//33 152//33
f 154//29 155//29 153//29
f 156//30 159//30 155//30
f 160//31 157//31 159//31
f 158//34 153//34 157//34
f 130//29 132//29 131//29
f 132//30 136//30 135//30
f 136//31 134//31 133//31
f 138//29 140//29 139//29
f 140//30 144//30 143//30
f 144//31 142//31 141//31
f 143//32 141//32 137//32
f 140//33 138//33 142//33
f 146//29 148//29 147//29
f 148//30 152//30 151//30
f 152//31 150//31 149//31
f 150//34 146//34 145//34
f 151//32 149//32 145//32
f 148//33 146//33 150//33
f 154//29 156//29 155//29
f 156//30 160//30 159//30
f 160//31 158//31 157//31
f 158//34 154//34 153//34
o Cube.003_Cube.016
v -0.750000 -0.250000 1.000000
v -0.750000 -0.250000 2.000000
v -1.250000 -0.250000 1.000000
v -1.250000 -0.250000 2.000000
v -0.750000 0.250000 1.000000
v -0.750000 0.250000 2.000000
v -1.250000 0.250000 1.000000
v -1.250000 0.250000 2.000000
v -0.500000 -0.125000 1.000000
v -0.500000 -0.125000 2.000000
v -0.750000 -0.125000 1.000000
v -0.750000 -0.125000 2.000000
v -0.500000 0.125000 1.000000
v -0.500000 0.125000 2.000000
v -0.750000 0.125000 1.000000
v -0.750000 0.125000 2.000000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
s off
f 162//35 163//35 161//35
f 164//36 167//36 163//36
f 168//37 165//37 167//37
f 166//38 161//38 165//38
f 170//35 171//35 169//35
f 176//37 173//37 175//37
f 174//38 169//38 173//38
f 162//35 164//35 163//35
f 164//36 168//36 167//36
f 168//37 166//37 165//37
f 166//38 162//38 161//38
f 170//35 172//35 171//35
f 176//37 174//37 173//37
f 174//38 170//38 169//38
o Cube.001_Cube.014
v -0.500000 -0.500000 0.000000
v -0.500000 -0.500000 0.375000
v -1.500000 -0.500000 0.000000
v -1.500000 -0.500000 0.375000
v -0.500000 0.500000 0.000000
v -0.500000 0.500000 0.375000
v -1.500000 0.500000 0.000000
v -1.500000 0.500000 0.375000
v -0.625000 -0.375000 0.375000
v -0.625000 -0.375000 0.625000
v -1.375000 -0.375000 0.375000
v -1.375000 -0.375000 0.625000
v -0.625000 0.375000 0.375000
v -0.625000 0.375000 0.625000
v -1.375000 0.375000 0.375000
v -1.375000 0.375000 0.625000
v -0.750000 -0.250000 0.625000
v -0.750000 -0.250000 1.000000
v -1.250000 -0.250000 0.625000
v -1.250000 -0.250000 1.000000
v -0.750000 0.250000 0.625000
v -0.750000 0.250000 1.000000
v -1.250000 0.250000 0.625000
v -1.250000 0.250000 1.000000
v -0.500000 -0.125000 0.375000
v -0.500000 -0.125000 1.000000
v -0.750000 -0.125000 0.375000
v -0.750000 -0.125000 1.000000
v -0.500000 0.125000 0.375000
v -0.500000 0.125000 1.000000
v -0.750000 0.125000 0.375000
v -0.750000 0.125000 1.000000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
s off
f 178//39 179//39 177//39
f 180//40 183//40 179//40
f 184//41 181//41 183//41
f 183//42 177//42 179//42
f 180//43 182//43 184//43
f 186//39 187//39 185//39
f 188//40 191//40 187//40
f 192//41 189//41 191//41
f 190//44 185//44 189//44
f 188//43 190//43 192//43
f 194//39 195//39 193//39
f 196//40 199//40 195//40
f 200//41 197//41 199//41
f 198//44 193//44 197//44
f 202//39 203//39 201//39
f 208//41 205//41 207//41
f 206//44 201//44 205//44
f 204//43 206//43 208//43
f 181//44 178//44 177//44
f 178//39 180//39 179//39
f 180//40 184//40 183//40
f 184//41 182//41 181//41
f 183//42 181//42 177//42
f 180//43 178//43 182//43
f 186//39 188//39 187//39
f 188//40 192//40 191//40
f 192//41 190//41 189//41
f 190//44 186//44 185//44
f 188//43 186//43 190//43
f 194//39 196//39 195//39
f 196//40 200//40 199//40
f 200//41 198//41 197//41
f 198//44 194//44 193//44
f 202//39 204//39 203//39
f 208//41 206//41 205//41
f 206//44 202//44 201//44
f 204//43 202//43 206//43
f 181//44 182//44 178//44
o Cube.011_Cube.013
v -0.500000 -0.500000 0.000000
v 0.500000 -0.500000 0.000000
v -0.500000 0.500000 0.000000
v 0.500000 0.500000 0.000000
v 0.500000 -0.500000 0.125000
v -0.500000 -0.500000 0.125000
v 0.500000 0.500000 0.125000
v -0.500000 0.500000 0.125000
v 0.500000 0.375000 0.125000
v 0.500000 0.375000 0.250000
v 0.500000 -0.375000 0.250000
v 0.500000 -0.375000 0.125000
v -0.500000 -0.375000 0.125000
v -0.500000 -0.375000 0.250000
v -0.500000 0.375000 0.250000
v -0.500000 0.375000 0.125000
v 0.500000 0.250000 0.250000
v 0.500000 -0.250000 0.250000
v -0.500000 -0.250000 0.250000
v -0.500000 0.250000 0.250000
v 0.500000 0.250000 0.375000
v 0.500000 -0.250000 0.375000
v -0.500000 -0.250000 0.375000
v -0.500000 0.250000 0.375000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
s off
f 209//45 212//45 210//45
f 215//46 224//46 217//46
f 210//47 214//47 209//47
f 211//48 215//48 212//48
f 220//46 214//46 213//46
f 219//47 221//47 220//47
f 218//46 228//46 225//46
f 217//48 223//48 218//48
f 226//46 222//46 219//46
f 228//48 229//48 225//48
f 229//46 231//46 230//46
f 226//47 231//47 227//47
f 209//45 211//45 212//45
f 215//46 216//46 224//46
f 210//47 213//47 214//47
f 211//48 216//48 215//48
f 220//46 221//46 214//46
f 219//47 222//47 221//47
f 218//46 223//46 228//46
f 217//48 224//48 223//48
f 226//46 227//46 222//46
f 228//48 232//48 229//48
f 229//46 232//46 231//46
f 226//47 230//47 231//47

View File

@@ -18,5 +18,5 @@ void main ()
gl_Position = pv * vec4(pos, 1);
vcoord = uv;
light = dot(vec3(0, 0, 1), normal) / 2 + .5;
light = dot(vec3(.2, .3, 1), normal) / 2 + .5;
}