Exemplo n.º 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();
        }
        public void SkinnedModelInstance_CalculatesCorrectBoneMatrices(String modelAssetFile, String modelBoneDataFile)
        {
            GivenAnUltravioletApplicationWithNoWindow()
            .WithContent(content =>
            {
                const Double TimeDelta = 0.25;

                var expectedByTime = LoadBoneData(modelBoneDataFile);

                var model         = content.Load <SkinnedModel>(modelAssetFile);
                var modelInstance = new SkinnedModelInstance(model);

                var animationTrack = modelInstance.PlayAnimation(SkinnedAnimationMode.Manual, 0);
                modelInstance.UpdateAnimationState();

                var animationDuration = (Int32)Math.Ceiling(model.Animations[0].Duration);
                for (var t = 0.0; t < animationDuration; t += TimeDelta)
                {
                    var skin                   = animationTrack.Model.Skins[0];
                    var boneCount              = skin.BoneCount;
                    var boneTransforms         = skin.GetBoneTransforms();
                    var boneTransformsExpected = expectedByTime[t];

                    TheResultingValue(boneTransformsExpected.Length)
                    .ShouldBe(boneTransforms.Length);

                    for (var i = 0; i < boneTransforms.Length; i++)
                    {
                        TheResultingValue(boneTransformsExpected[i])
                        .WithinDelta(0.0001f).ShouldBe(boneTransforms[i]);
                    }

                    modelInstance.AdvanceTime(TimeDelta);
                }
            })
            .RunForOneFrame();
        }
Exemplo n.º 3
0
        public override bool Init()
        {
            if (!base.Init())
            {
                return(false);
            }

            Effects.InitAll(Device);
            InputLayouts.InitAll(Device);
            RenderStates.InitAll(Device);

            _texMgr = new TextureManager();
            _texMgr.Init(Device);

            _drone         = new SkinnedModel(Device, _texMgr, "Models/drone.x", "Textures", true);
            _droneInstance = new SkinnedModelInstance(
                "Attack",
                Matrix.RotationY(MathF.PI),
                _drone

                );
            foreach (var clip in _droneInstance.Clips)
            {
                _droneInstance.AddClip(clip);
            }
            _droneInstance.LoopClips = true;


            _mage = new SkinnedModel(Device, _texMgr, "Models/magician.x", "textures", true);

            _mageInstance = new SkinnedModelInstance(
                "Attack",
                Matrix.RotationY(MathF.PI) * Matrix.Translation(4.0f, 0, 0),
                _mage
                );
            foreach (var clip in _mageInstance.Clips)
            {
                _mageInstance.AddClip(clip);
            }
            _mageInstance.LoopClips = true;

            _soldier         = new SkinnedModel(Device, _texMgr, "Models/soldier.x", "Textures", true);
            _soldierInstance = new SkinnedModelInstance(
                "Attack",
                Matrix.RotationY(MathF.PI) * Matrix.Translation(10, 0, 0),
                _soldier
                );

            foreach (var clip in _soldierInstance.Clips)
            {
                _soldierInstance.AddClip(clip);
            }
            _soldierInstance.LoopClips = true;

            _grid = new BasicModel();
            _grid.CreateGrid(Device, 30, 30, 60, 60);
            _grid.DiffuseMapSRV[0] = (_texMgr.CreateTexture("Textures/floor.dds"));
            _grid.NormalMapSRV[0]  = (_texMgr.CreateTexture("Textures/floor_nmap.dds"));
            _gridInstance          = new BasicModelInstance(_grid)
            {
                World = Matrix.Translation(0, -1.5f, 0)
            };

            return(true);
        }