public MeshInstance ( RenderSystem rs, Scene scene, Mesh mesh, MaterialInstance[] materials )
{
Visible = true;
World = Matrix.Identity;
Color = Color4.Zero;
Blending = new Vector4(1,1,1,1);
vb = mesh.VertexBuffer;
ib = mesh.IndexBuffer;
vertexCount = mesh.VertexCount;
indexCount = mesh.IndexCount;
ShadingGroups = mesh.Subsets
.Select( s => new ShadingGroup( s, materials[s.MaterialIndex] ) )
.ToArray();
IsSkinned = mesh.IsSkinned;
if (IsSkinned && scene.Nodes.Count > SceneRenderer.MaxBones) {
throw new ArgumentOutOfRangeException( string.Format("Scene contains more than {0} bones and cannot be used for skinning.", SceneRenderer.MaxBones ) );
}
if (IsSkinned) {
BoneTransforms = Enumerable
.Range(0, SceneRenderer.MaxBones)
.Select( i => Matrix.Identity )
.ToArray();
}
}
}