示例#1
0
        /// <summary>
        /// Draw Mesh with the effect applied
        /// </summary>
        /// <param name="modelMeshPart"></param>
        /// <param name="worldViewProjection"></param>
        /// <param name="effectPass"></param>
        private void DrawMeshPart(ModelMeshPart modelMeshPart, EffectPasses effectPass)
        {
            _graphicsDevice.SetVertexBuffer(modelMeshPart.VertexBuffer);
            _graphicsDevice.Indices = (modelMeshPart.IndexBuffer);
            int primitiveCount = modelMeshPart.PrimitiveCount;
            int vertexOffset   = modelMeshPart.VertexOffset;
            int startIndex     = modelMeshPart.StartIndex;

            switch (effectPass)
            {
            case EffectPasses.NoNormalNoTexUnskinned:
                _noNormalNoTexUnskinnedPass.Apply();
                break;

            case EffectPasses.NoNormalUnskinned:
                _noNormalUnskinnedPass.Apply();
                break;

            case EffectPasses.Unskinned:
                _unskinnedPass.Apply();
                break;

            case EffectPasses.UnskinnedNormalMapped:
                _unskinnedNormalMappedPass.Apply();
                break;

            case EffectPasses.Skinned:
                _skinnedPass.Apply();
                break;

            case EffectPasses.SkinnedNormalMapped:
                _skinnedNormalMappedPass.Apply();
                break;

            case EffectPasses.SkinnedDepth:
                _skinnedDepthPass.Apply();
                break;

            case EffectPasses.UnskinnedDepth:
                _unskinnedDepthPass.Apply();
                break;
            }

            _graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, vertexOffset, startIndex, primitiveCount);
        }
示例#2
0
        /// <summary>
        /// Base draw
        /// </summary>
        /// <param name="model"></param>
        /// <param name="world"></param>
        /// <param name="viewProjection"></param>
        /// <param name="cameraPosition"></param>
        /// <param name="effectPass"></param>
        /// <param name="bones"></param>
        public void DrawMesh(Model model, Matrix world, Matrix view, Matrix viewProjection, Vector3 cameraPosition, EffectPasses effectPass, Matrix[] bones = null)
        {
            _worldViewProjParameter.SetValue(viewProjection);
            _worldITParameter.SetValue(world /*Matrix.Transpose(Matrix.Invert(world))*/);
            _worldParameter.SetValue(world);
            _viewParameter.SetValue(view);
            if (bones != null)
            {
                _bonesParameter.SetValue(bones);
            }
            _cameraPositionParameter.SetValue(cameraPosition);

            for (int index = 0; index < model.Meshes.Count; index++)
            {
                var modelMesh = model.Meshes[index];

                for (int i = 0; i < modelMesh.MeshParts.Count; i++)
                {
                    var modelMeshPart = modelMesh.MeshParts[i];

                    DrawMeshPart(modelMeshPart, effectPass);
                }
            }
        }