protected Vector3 WorldDir(Sprig b, int childcount) { Vector3 result = Vector3.zero; Vector3 normal = Vector3.Cross(b.parent.dir, b.parent.parent.dir); Vector3 target = b.dir; result = Quaternion.AngleAxis((b.parent.sprig.Count % 2 == 0? 1 : -1) * this.angle / 2, normal * -1) * target; return(result.normalized); }
private void Sprigging(Branch b, float weight, int childcount = 2, int sprigcount = 2) { if (b.level > this.intensity - 1 || b.level < 2) { return; } for (int i = 0; i < sprigcount; i++) { Branch s = new Sprig(b, sprigcount, weight / 2.0f); b.sprig.Add(s); this.branches.Add(s); Branching(s, 2, sprigcount); } }