diff --git a/Kav.csproj b/Kav.csproj
index cdb5cfc..25eac44 100644
--- a/Kav.csproj
+++ b/Kav.csproj
@@ -9,11 +9,12 @@
+
- Smuggler.Resources.PBREffect.fxb
+ Kav.Resources.PBREffect.fxb
diff --git a/ModelLoader.cs b/ModelLoader.cs
new file mode 100644
index 0000000..fc5b206
--- /dev/null
+++ b/ModelLoader.cs
@@ -0,0 +1,58 @@
+using System.Collections.Generic;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace Kav
+{
+ public static class ModelLoader
+ {
+ public static Kav.Model Load(GraphicsDevice graphicsDevice, Smuggler.ModelData modelData)
+ {
+ var meshes = new List();
+
+ foreach (var meshData in modelData.Meshes)
+ {
+ var meshParts = new List();
+
+ foreach (var meshPartData in meshData.MeshParts)
+ {
+ var effect = new Kav.PBREffect(
+ graphicsDevice
+ )
+ {
+ Albedo = meshPartData.Albedo,
+ Metallic = meshPartData.Metallic,
+ Roughness = meshPartData.Roughness,
+
+ AlbedoTexture = meshPartData.AlbedoTexture,
+ NormalTexture = meshPartData.NormalTexture,
+ MetallicRoughnessTexture = meshPartData.MetallicRoughnessTexture
+ };
+
+ var triangles = new Kav.Triangle[meshPartData.Triangles.Length];
+ for (int i = 0; i < meshPartData.Triangles.Length; i++)
+ {
+ var smugglerTriangle = meshPartData.Triangles[i];
+
+ triangles[i] = new Kav.Triangle(
+ smugglerTriangle.A,
+ smugglerTriangle.B,
+ smugglerTriangle.C
+ );
+ }
+
+ meshParts.Add(new Kav.MeshPart(
+ meshPartData.VertexBuffer,
+ meshPartData.IndexBuffer,
+ meshPartData.Positions,
+ triangles,
+ effect
+ ));
+ }
+
+ meshes.Add(new Kav.Mesh(meshParts.ToArray()));
+ }
+
+ return new Kav.Model(meshes.ToArray());
+ }
+ }
+}
diff --git a/Resources.cs b/Resources.cs
index 918ca8a..e20f87b 100644
--- a/Resources.cs
+++ b/Resources.cs
@@ -21,7 +21,7 @@ namespace Kav
private static byte[] GetResource(string name)
{
Stream stream = typeof(Resources).Assembly.GetManifestResourceStream(
- "Smuggler.Resources." + name + ".fxb"
+ "Kav.Resources." + name + ".fxb"
);
using (MemoryStream ms = new MemoryStream())
{