public MultimeshObject PhotonsToMesh(List <ScatterPhoton> photons) { MultimeshObject ret = new MultimeshObject(); List <Vector3> verts = new List <Vector3>(); List <Vector2> uvs = new List <Vector2>(); //List<Color> clrs = new List<Color>(); List <int> indc = new List <int>(); // Debug.LogFormat("Photons started: {0}",photons.Count); int cntph = 0; foreach (ScatterPhoton ph in photons) { int cnt = 0; while (!ph.decayed) { verts.Add(ph.position - initialPos); // float shft = (en.time - mintime) / td; uvs.Add(new Vector2(ph.timeOffset, 0)); //65530 // clrs.Add(Color.Lerp(Color.red, Color.green, shft)); if (cnt == 0 && ph.decayed) { verts.RemoveAt(verts.Count - 1); uvs.RemoveAt(uvs.Count - 1); } if (cnt > 0) { indc.Add(verts.Count - 2); indc.Add(verts.Count - 1); } if (verts.Count > 65530) { break; } // Debug.LogFormat("Phdir: {0}", ph.direction); ph.Propagate(IcecubeDust.AbsorbtionLength(ph.position, ph.direction), IcecubeDust.ScatterLength(ph.position)); cnt += 1; } cntph++; if (cntph % 100 == 0) { // Debug.LogFormat("Photons now: {0}", cntph); } if (verts.Count > 65530) { Meshobject newM = new Meshobject(verts.ToArray(), uvs.ToArray(), indc.ToArray()); ret.meshes.Add(newM); verts.Clear(); uvs.Clear(); indc.Clear(); } } if (indc.Count > 1) { Meshobject newM = new Meshobject(verts.ToArray(), uvs.ToArray(), indc.ToArray()); ret.meshes.Add(newM); } //Debug.Log("Returning from sim"); return(ret); }
public static float scatterdirprob(Vector3 dir, Vector3 d2) { Vector3 adj1 = IcecubeDust.AnizoAdjust(dir); Vector3 adj2 = IcecubeDust.AnizoAdjust(d2); float cosn = Vector3.Dot(adj1, adj2) / (adj1.magnitude * adj2.magnitude); return(scatterprob(cosn)); }