Beispiel #1
0
        public void convert(string name, ParameterParser args, Stream from, Stream to)
        {
            var obj = SkeletalAnimation.ReadNew(from);

            byte[] buffer = Encoding.Default.GetBytes(Utils.convertToJSON(obj));
            to.Write(buffer, 0, buffer.Length);
        }
Beispiel #2
0
        public void read()
        {
            MemoryStream      stream = new MemoryStream(sampleData, false);
            SkeletalAnimation ani    = SkeletalAnimation.ReadNew(stream);

            testAnimation(ani);
        }
Beispiel #3
0
        /// <summary>
        /// Bind the material, this will call BeginInstance on the backend
        /// It is up to the caller to call EndInstance
        /// </summary>
        /// <param name="backend"></param>
        /// <param name="world"></param>
        /// <param name="worldView"></param>
        /// <param name="itWorldView"></param>
        /// <param name="modelViewProjection"></param>
        public void BindPerObject(Backend backend, ref Matrix4 world, ref Matrix4 worldView, ref Matrix4 itWorld, ref Matrix4 modelViewProjection, SkeletalAnimation.SkeletonInstance skeleton)
        {
            backend.BindShaderVariable(Handles.ModelViewProjection, ref modelViewProjection);
            backend.BindShaderVariable(Handles.World, ref world);
            backend.BindShaderVariable(Handles.WorldView, ref worldView);
            backend.BindShaderVariable(Handles.ItWorld, ref itWorld);

            if (skeleton != null)
            {
                backend.BindShaderVariable(Handles.Bones, ref skeleton.FinalBoneTransforms);
            }
        }
Beispiel #4
0
        public void write()
        {
            MemoryStream      readStream = new MemoryStream(sampleData, false);
            SkeletalAnimation ani        = SkeletalAnimation.ReadNew(readStream);

            MemoryStream writeStream = new MemoryStream();

            ani.Write(writeStream);

            MemoryStream      rereadStream = new MemoryStream(writeStream.ToArray(), false);
            SkeletalAnimation rereadAni    = SkeletalAnimation.ReadNew(rereadStream);

            testAnimation(rereadAni);
        }
Beispiel #5
0
        private void testAnimation(SkeletalAnimation ani)
        {
            Assert.NotNull(ani);
            Assert.AreEqual(4, ani.flags);
            Assert.AreEqual(3.0f, ani.duration, TOLERANCE);
            Assert.AreEqual(3, ani.BoneCount);
            Assert.AreEqual(3, ani.boneFrames.Length);

            Assert.AreEqual(3, ani.boneFrames[0].Length);
            Assert.AreEqual(1.0f, ani.boneFrames[0][0].rot.X, TOLERANCE);
            Assert.AreEqual(2.0f, ani.boneFrames[0][0].rot.Y, TOLERANCE);
            Assert.AreEqual(3.0f, ani.boneFrames[0][0].rot.Z, TOLERANCE);
            Assert.AreEqual(4.0f, ani.boneFrames[0][0].rot.W, TOLERANCE);
            Assert.AreEqual(5.0f, ani.boneFrames[0][0].pos.X, TOLERANCE);
            Assert.AreEqual(6.0f, ani.boneFrames[0][0].pos.Y, TOLERANCE);
            Assert.AreEqual(7.0f, ani.boneFrames[0][0].pos.Z, TOLERANCE);
            Assert.AreEqual(0.0f, ani.boneFrames[0][0].time, TOLERANCE);
            testNullKeyFrame(ani.boneFrames[0][1]);
            Assert.AreEqual(1.0f, ani.boneFrames[0][1].time, TOLERANCE);
            testNullKeyFrame(ani.boneFrames[0][2]);
            Assert.AreEqual(2.0f, ani.boneFrames[0][2].time, TOLERANCE);

            Assert.AreEqual(2, ani.boneFrames[1].Length);
            testNullKeyFrame(ani.boneFrames[1][0]);
            Assert.AreEqual(0.0f, ani.boneFrames[1][0].time, TOLERANCE);
            Assert.AreEqual(8.0f, ani.boneFrames[1][1].rot.X, TOLERANCE);
            Assert.AreEqual(9.0f, ani.boneFrames[1][1].rot.Y, TOLERANCE);
            Assert.AreEqual(10.0f, ani.boneFrames[1][1].rot.Z, TOLERANCE);
            Assert.AreEqual(11.0f, ani.boneFrames[1][1].rot.W, TOLERANCE);
            Assert.AreEqual(12.0f, ani.boneFrames[1][1].pos.X, TOLERANCE);
            Assert.AreEqual(13.0f, ani.boneFrames[1][1].pos.Y, TOLERANCE);
            Assert.AreEqual(14.0f, ani.boneFrames[1][1].pos.Z, TOLERANCE);
            Assert.AreEqual(1.5, ani.boneFrames[1][1].time);

            Assert.AreEqual(1, ani.boneFrames[2].Length);
            testNullKeyFrame(ani.boneFrames[2][0]);
            Assert.AreEqual(0.0f, ani.boneFrames[2][0].time, TOLERANCE);
        }
Beispiel #6
0
        public Model(Renderer Renderer, H3DModel BaseModel)
        {
            this.Renderer  = Renderer;
            this.BaseModel = BaseModel;

            Meshes0 = new List <Mesh>();
            Meshes1 = new List <Mesh>();
            Meshes2 = new List <Mesh>();
            Meshes3 = new List <Mesh>();
            Shaders = new List <Shader>();

            ShaderHashes = new Dictionary <int, int>();

            InverseTransforms = new Matrix4[BaseModel.Skeleton.Count];

            for (int Bone = 0; Bone < BaseModel.Skeleton.Count; Bone++)
            {
                InverseTransforms[Bone] = BaseModel.Skeleton[Bone].InverseTransform.ToMatrix4();
            }

            UpdateShaders();

            AddMeshes(Meshes0, BaseModel.MeshesLayer0);
            AddMeshes(Meshes1, BaseModel.MeshesLayer1);
            AddMeshes(Meshes2, BaseModel.MeshesLayer2);
            AddMeshes(Meshes3, BaseModel.MeshesLayer3);

            SkeletalAnim   = new SkeletalAnimation(BaseModel.Skeleton);
            MaterialAnim   = new MaterialAnimation(BaseModel.Materials);
            VisibilityAnim = new VisibilityAnimation(
                BaseModel.MeshNodesTree,
                BaseModel.MeshNodesVisibility);

            Transform = Matrix4.Identity;

            UpdateAnimationTransforms();
        }
Beispiel #7
0
        protected override void RenderImGui()
        {
            if (ImGui.BeginMenuBar())
            {
                ImGui.PushStyleColor(ImGuiCol.Button, new Vector4(0.3f, 0.3f, 0.3f, 1f));
                if (ImGui.Button("Open OBJ"))
                {
                    var explorer = new FileExplorer <ObjMeshAsset>(asset => { DisplayObject.Entity = asset.Entity; });
                    _toolsRoot.AddLegacyWindow(explorer);
                }

                if (ImGui.Button("Open EM3"))
                {
                    var explorer = new FileExplorer <EmotionMeshAsset>(asset => { DisplayObject.Entity = asset.Entity; });
                    _toolsRoot.AddLegacyWindow(explorer);
                }

                if (ImGui.Button("Open Sprite Stack Texture"))
                {
                    var explorer = new FileExplorer <SpriteStackTexture>(asset =>
                    {
                        _toolsRoot.AddLegacyWindow(new Vec2Modal(size =>
                        {
                            MeshEntity entity    = asset.GetSpriteStackEntity(size);
                            DisplayObject.Entity = entity;
                        }, "Sprite Stack Settings", "Individual Frame Size", new Vector2(32, 32)));
                    });
                    _toolsRoot.AddLegacyWindow(explorer);
                }

                ImGui.EndMenuBar();
            }

            ImGui.Checkbox("Show Terrain", ref _showTerrain);

            Vector3 pos = DisplayObject.Position;

            if (ImGui.DragFloat3("Position", ref pos))
            {
                DisplayObject.Position = pos;
            }

            float scale = DisplayObject.Scale;

            if (ImGui.DragFloat("Scale", ref scale))
            {
                DisplayObject.Scale = scale;
            }

            Vector3 rot = DisplayObject.RotationDeg;

            if (ImGui.DragFloat3("Rotation", ref rot))
            {
                DisplayObject.RotationDeg = rot;
            }

            if (DisplayObject.Entity != null && DisplayObject.Entity.Animations != null && ImGui.BeginCombo("Animation", DisplayObject.CurrentAnimation))
            {
                if (ImGui.Button("None"))
                {
                    DisplayObject.SetAnimation(null);
                }

                for (var i = 0; i < DisplayObject.Entity.Animations.Length; i++)
                {
                    SkeletalAnimation anim = DisplayObject.Entity.Animations[i];
                    if (ImGui.Button($"{anim.Name}"))
                    {
                        DisplayObject.SetAnimation(anim.Name);
                    }
                }

                ImGui.EndCombo();
            }
        }