Пример #1
0
        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();
        }
Пример #2
0
        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();
        }