示例#1
0
 protected override void WriteMeshPrimitive(MeshPrimitiveReader srcPrimitive, Effect effect)
 {
     if (srcPrimitive.IsSkinned)
     {
         WriteMeshPrimitive <VertexSkinned>(effect, srcPrimitive);
     }
     else
     {
         WriteMeshPrimitive <VertexPositionNormalTexture>(effect, srcPrimitive);
     }
 }
示例#2
0
        private void _WriteMeshPrimitive(MeshPrimitiveReader srcPrim, SRCMATERIAL srcMaterial)
        {
            if (srcMaterial == null)
            {
                srcMaterial = GetDefaultMaterial();
            }

            var effect = _MatFactory.GetMaterial(srcMaterial, srcPrim.IsSkinned);

            if (effect == null)
            {
                effect = CreateEffect(srcMaterial, srcPrim.IsSkinned);
                _MatFactory.Register(srcMaterial, srcPrim.IsSkinned, effect);
            }

            WriteMeshPrimitive(srcPrim, effect);
        }
示例#3
0
        private void CreateMeshPart(ModelMeshPart dstPart, MeshPrimitive srcPart, MeshNormalsFallback normalsFunc, int maxBones)
        {
            var doubleSided = srcPart.Material?.DoubleSided ?? false;

            var srcGeometry = new MeshPrimitiveReader(srcPart, doubleSided, normalsFunc);

            var eff = srcGeometry.IsSkinned ? _MatFactory.UseSkinnedEffect(srcPart.Material) : _MatFactory.UseStaticEffect(srcPart.Material);

            dstPart.Effect = eff;

            var vb = srcGeometry.IsSkinned ? CreateVertexBuffer(srcGeometry.ToXnaSkinned()) : CreateVertexBuffer(srcGeometry.ToXnaStatic());

            dstPart.VertexBuffer = vb;
            dstPart.NumVertices  = srcGeometry.VertexCount;
            dstPart.VertexOffset = 0;

            dstPart.IndexBuffer    = CreateIndexBuffer(srcGeometry.TriangleIndices);
            dstPart.PrimitiveCount = srcGeometry.TriangleIndices.Length;
            dstPart.StartIndex     = 0;
        }
示例#4
0
 protected void WriteMeshPrimitive <TVertex>(Effect effect, MeshPrimitiveReader primitive)
     where TVertex : unmanaged, IVertexType
 {
     _MeshWriter.WriteMeshPrimitive <TVertex>(_CurrentMeshIndex, effect, primitive);
 }
示例#5
0
 protected abstract void WriteMeshPrimitive(MeshPrimitiveReader srcPrimitive, Effect effect);