rearrange function order in importer
parent
e670bba1a6
commit
c5ecda6b7d
152
Importer.cs
152
Importer.cs
|
@ -7,6 +7,32 @@ namespace Smuggler
|
|||
{
|
||||
public static class Importer
|
||||
{
|
||||
public static Model ImportGLB(GraphicsDevice graphicsDevice, Stream stream)
|
||||
{
|
||||
var sharpModel = SharpGLTF.Schema2.ModelRoot.ReadGLB(stream);
|
||||
var vertexType = InferVertexType(sharpModel);
|
||||
|
||||
if (vertexType == null) { return null; }
|
||||
|
||||
var meshes = new List<Mesh>();
|
||||
|
||||
foreach (var mesh in sharpModel.LogicalMeshes)
|
||||
{
|
||||
var meshParts = new List<MeshPart>();
|
||||
|
||||
foreach (var primitive in mesh.Primitives)
|
||||
{
|
||||
meshParts.Add(
|
||||
ImportMeshPart(graphicsDevice, vertexType, primitive)
|
||||
);
|
||||
}
|
||||
|
||||
meshes.Add(new Mesh(meshParts.ToArray()));
|
||||
}
|
||||
|
||||
return new Model(meshes.ToArray());
|
||||
}
|
||||
|
||||
private static System.Type InferVertexType(SharpGLTF.Schema2.ModelRoot model)
|
||||
{
|
||||
bool hasColor = false;
|
||||
|
@ -70,6 +96,56 @@ namespace Smuggler
|
|||
return null;
|
||||
}
|
||||
|
||||
private static MeshPart ImportMeshPart(GraphicsDevice graphicsDevice, System.Type vertexType, SharpGLTF.Schema2.MeshPrimitive primitive)
|
||||
{
|
||||
var indices = Indices(primitive);
|
||||
var positions = Positions(primitive);
|
||||
var triangles = Triangles(primitive);
|
||||
|
||||
var vertexBuffer = new VertexBuffer(
|
||||
graphicsDevice,
|
||||
vertexType,
|
||||
positions.Length,
|
||||
BufferUsage.None
|
||||
);
|
||||
|
||||
var indexBuffer = new IndexBuffer(
|
||||
graphicsDevice,
|
||||
IndexElementSize.ThirtyTwoBits,
|
||||
indices.Length,
|
||||
BufferUsage.None
|
||||
);
|
||||
|
||||
indexBuffer.SetData(indices);
|
||||
|
||||
if (vertexType == typeof(VertexPositionColor))
|
||||
{
|
||||
ImportVertexPositionColor(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
else if (vertexType == typeof(VertexPositionColorTexture))
|
||||
{
|
||||
ImportVertexPositionColorTexture(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
else if (vertexType == typeof(VertexPositionNormalTexture))
|
||||
{
|
||||
ImportVertexPositionNormalTexture(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
else if (vertexType == typeof(VertexPositionTexture))
|
||||
{
|
||||
ImportVertexPositionTexture(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
|
||||
return new MeshPart(
|
||||
vertexBuffer,
|
||||
indexBuffer,
|
||||
positions,
|
||||
triangles,
|
||||
new BasicEffect(graphicsDevice)
|
||||
);
|
||||
}
|
||||
|
||||
/* Attribute Getters */
|
||||
|
||||
private static Vector3[] Positions(SharpGLTF.Schema2.MeshPrimitive primitive)
|
||||
{
|
||||
var positionAccessor = primitive.GetVertexAccessor("POSITION").AsVector3Array();
|
||||
|
@ -151,6 +227,8 @@ namespace Smuggler
|
|||
return indices;
|
||||
}
|
||||
|
||||
/* Vertex Builders */
|
||||
|
||||
private static void ImportVertexPositionColor(
|
||||
SharpGLTF.Schema2.MeshPrimitive primitive,
|
||||
VertexBuffer vertexBuffer,
|
||||
|
@ -252,79 +330,5 @@ namespace Smuggler
|
|||
|
||||
vertexBuffer.SetData(vertices);
|
||||
}
|
||||
|
||||
private static MeshPart ImportMeshPart(GraphicsDevice graphicsDevice, System.Type vertexType, SharpGLTF.Schema2.MeshPrimitive primitive)
|
||||
{
|
||||
var indices = Indices(primitive);
|
||||
var positions = Positions(primitive);
|
||||
var triangles = Triangles(primitive);
|
||||
|
||||
var vertexBuffer = new VertexBuffer(
|
||||
graphicsDevice,
|
||||
vertexType,
|
||||
positions.Length,
|
||||
BufferUsage.None
|
||||
);
|
||||
|
||||
var indexBuffer = new IndexBuffer(
|
||||
graphicsDevice,
|
||||
IndexElementSize.ThirtyTwoBits,
|
||||
indices.Length,
|
||||
BufferUsage.None
|
||||
);
|
||||
|
||||
indexBuffer.SetData(indices);
|
||||
|
||||
if (vertexType == typeof(VertexPositionColor))
|
||||
{
|
||||
ImportVertexPositionColor(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
else if (vertexType == typeof(VertexPositionColorTexture))
|
||||
{
|
||||
ImportVertexPositionColorTexture(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
else if (vertexType == typeof(VertexPositionNormalTexture))
|
||||
{
|
||||
ImportVertexPositionNormalTexture(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
else if (vertexType == typeof(VertexPositionTexture))
|
||||
{
|
||||
ImportVertexPositionTexture(primitive, vertexBuffer, indices, positions);
|
||||
}
|
||||
|
||||
return new MeshPart(
|
||||
vertexBuffer,
|
||||
indexBuffer,
|
||||
positions,
|
||||
triangles,
|
||||
new BasicEffect(graphicsDevice)
|
||||
);
|
||||
}
|
||||
|
||||
public static Model ImportGLB(GraphicsDevice graphicsDevice, Stream stream)
|
||||
{
|
||||
var sharpModel = SharpGLTF.Schema2.ModelRoot.ReadGLB(stream);
|
||||
var vertexType = InferVertexType(sharpModel);
|
||||
|
||||
if (vertexType == null) { return null; }
|
||||
|
||||
var meshes = new List<Mesh>();
|
||||
|
||||
foreach (var mesh in sharpModel.LogicalMeshes)
|
||||
{
|
||||
var meshParts = new List<MeshPart>();
|
||||
|
||||
foreach (var primitive in mesh.Primitives)
|
||||
{
|
||||
meshParts.Add(
|
||||
ImportMeshPart(graphicsDevice, vertexType, primitive)
|
||||
);
|
||||
}
|
||||
|
||||
meshes.Add(new Mesh(meshParts.ToArray()));
|
||||
}
|
||||
|
||||
return new Model(meshes.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue