private void GenerateCrossfadeFrame() { if (currentCrossFade.generatedFrame == currentCrossFade.currentFrame) { return; } int vertexCount = currentCrossFade.toFrame.verts.Length; currentCrossFade.PopulateFrame(vertexCount); Vector3[] from = currentCrossFade.fromFrame.verts; Vector3[] to = currentCrossFade.toFrame.verts; // generate the frames for the crossfade CrossFadeFrameData frame = currentCrossFade.frame; Vector3 center = Vector3.zero; Vector3 min = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); Vector3 max = new Vector3(float.MinValue, float.MinValue, float.MinValue); float delta = currentCrossFade.currentFrame / (float)currentCrossFade.framesNeeded; for (int j = 0; j < frame.positions.Length; j++) { Vector3 pos = Vector3.Lerp(from[j], to[j], delta); if (pos.x < min.x) { min.x = pos.x; } if (pos.y < min.y) { min.y = pos.y; } if (pos.z < min.z) { min.z = pos.z; } if (pos.x > max.x) { max.x = pos.x; } if (pos.y > max.y) { max.y = pos.y; } if (pos.z > max.z) { max.z = pos.z; } center += pos; frame.positions[j] = pos; } center /= frame.positions.Length; currentCrossFade.frame = frame; currentCrossFade.frame.bounds = new Bounds(center, max - min); currentCrossFade.generatedFrame = currentCrossFade.currentFrame; }
public void PopulateFrame(int length) { if (frame == null) { frame = new CrossFadeFrameData(); } if (frame.positions == null) { frame.positions = AllocatedArray <Vector3> .Get(length); } if (frame.normals == null) { frame.normals = AllocatedArray <Vector3> .Get(length); } }