/// <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); }
/// <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); } } }