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; } }
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); }