Beispiel #1
0
        static void ApplyBoneTransformation()
        {
            PositionVector vertex;
            PositionVector position;
            PositionVector transformation;
            float          temp;

            foreach (ModelVertex modelVertex in model.Vertices)
            {
                vertex = new PositionVector();
                vertex.Zero();
                position = new PositionVector(new Vector3D(modelVertex.Position.x, modelVertex.Position.y, modelVertex.Position.z));
                foreach (ModelVertexBone bone in modelVertex.Bones)
                {
                    if (bone.weight > 0)
                    {
                        transformation  = matrices[bone.index] * position;
                        transformation *= ((float)bone.weight / 255f);
                        vertex         += transformation;
                    }
                }
                modelVertex.Position = new ModelVertexPosition
                {
                    x = vertex[0, 0],
                    y = vertex[1, 0],
                    z = vertex[2, 0]
                };
                temp = -modelVertex.Position.y;
                modelVertex.Position.y = modelVertex.Position.z;
                modelVertex.Position.z = temp;
            }
        }
Beispiel #2
0
        public static PositionVector operator *(TransformationMatrix m, PositionVector v)
        {
            PositionVector vector = new PositionVector();

            vector.Zero();
            for (int i = 0; i < vector.Rows; i++)
            {
                for (int j = 0; j < m.Columns; j++)
                {
                    vector[i, 0] += m[i, j] * v[j, 0];
                }
            }
            return(vector);
        }