public void DrawSkinnedModel(String modelName, String animName, Vector3 position, float rotation) { SkinnedModelInstance skinnedModelInstance = new SkinnedModelInstance(); skinnedModelInstance.Mesh = dSkinnedModelDict[modelName]; skinnedModelInstance.Mesh.Meshes[0].Texture = dTextureDict["pankka_body"]; skinnedModelInstance.SpeedTransitionSecond = 0.4f; skinnedModelInstance.Initialize(); skinnedModelInstance.SetAnimation(dSkinnedAnimationDict[animName], gameTime); Matrix positionMatrix = Matrix.CreateTranslation(position); Matrix rotationMatrix = Matrix.CreateRotationY(rotation); float scale = 0.025f; skinnedModelInstance.Transformation = Matrix.CreateScale(scale) * rotationMatrix * positionMatrix; skinnedModelInstance.Update(gameTime); SkinnedModelEffect.Parameters["SunOrientation"].SetValue(Vector3.Normalize(SunOrientation)); SkinnedModelEffect.Parameters["World"].SetValue(skinnedModelInstance.Transformation); SkinnedModelEffect.Parameters["WorldViewProjection"].SetValue(skinnedModelInstance.Transformation * viewMatrix * projectionMatrix); foreach (var meshInstance in skinnedModelInstance.MeshInstances) { SkinnedModelEffect.Parameters["gBonesOffsets"].SetValue(meshInstance.BonesOffsets); SkinnedModelEffect.Parameters["Texture1"].SetValue(meshInstance.Mesh.Texture); graphicsDevice.SetVertexBuffer(meshInstance.Mesh.VertexBuffer); graphicsDevice.Indices = meshInstance.Mesh.IndexBuffer; graphicsDevice.DepthStencilState = DepthStencilState.Default; foreach (EffectPass pass in SkinnedModelEffect.CurrentTechnique.Passes) { pass.Apply(); graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, meshInstance.Mesh.FaceCount); } } graphicsDevice.SetVertexBuffer(null); graphicsDevice.Indices = null; //skinnedModelInstance.Dispose(); }
public void DrawPlayer(string technique, String animName, String secondaryAnimName, Vector3 position, float rotation, float animFrame, float animFade) { if (playerInstance.Animation != dSkinnedAnimationDict[animName]) { try { playerInstance.SetAnimation(dSkinnedAnimationDict[animName], gameTime); } catch (KeyNotFoundException e) { playerInstance.SetAnimation(dSkinnedAnimationDict["player_tpose"], gameTime); } } if (secondaryAnimName != null) { playerInstance.SetSecondaryAnimation(dSkinnedAnimationDict["player_tpose"], gameTime); } else { playerInstance.SetSecondaryAnimation(null, gameTime); } playerInstance.SecondaryAnimationFading = animFade; playerInstance.FrameIndex = animFrame; Matrix positionMatrix = Matrix.CreateTranslation(position); Matrix rotationMatrix = Matrix.CreateRotationY(rotation); float scale = 0.025f; playerInstance.Transformation = Matrix.CreateScale(scale) * rotationMatrix * positionMatrix; playerInstance.Update(gameTime); //SkinnedModelEffect.CurrentTechnique = SimpleModelEffect.Techniques[technique]; //SkinnedModelEffect.Parameters["LightPos"].SetValue(lightPos); //SkinnedModelEffect.Parameters["LightPower"].SetValue(2.0f); //SkinnedModelEffect.Parameters["Ambient"].SetValue(0.2f); SkinnedModelEffect.Parameters["World"].SetValue(playerInstance.Transformation * worldMatrix); SkinnedModelEffect.Parameters["WorldViewProjection"].SetValue(playerInstance.Transformation * worldMatrix * viewMatrix * projectionMatrix); Matrix worldInverseTransposeMatrix = Matrix.Transpose(Matrix.Invert(playerInstance.Transformation * worldMatrix)); SkinnedModelEffect.Parameters["WorldInverseTranspose"].SetValue(worldInverseTransposeMatrix); //SkinnedModelEffect.Parameters["LightWorldViewProjection"].SetValue(playerInstance.Transformation * worldMatrix * lightViewProjectionMatrix); foreach (var meshInstance in playerInstance.MeshInstances) { SkinnedModelEffect.Parameters["gBonesOffsets"].SetValue(meshInstance.BonesOffsets); SkinnedModelEffect.Parameters["Texture1"].SetValue(meshInstance.Mesh.Texture); graphicsDevice.SetVertexBuffer(meshInstance.Mesh.VertexBuffer); graphicsDevice.Indices = meshInstance.Mesh.IndexBuffer; foreach (EffectPass pass in SkinnedModelEffect.CurrentTechnique.Passes) { pass.Apply(); graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, meshInstance.Mesh.FaceCount); } } //skinnedModelInstance.Dispose(); }