示例#1
0
    public List <ScatterPhoton> Emit(float duration)
    {
        List <ScatterPhoton> ret = new List <ScatterPhoton>();

        // Debug.LogFormat("Emitting energy {0}",energy);
        for (int i = 0; i < energy; i++)
        {
            Vector3 emitPos = location + radius * TrailmeshMaker.onUnitSphere();
            Vector3 perp    = new Vector3(-directionPreference.y, directionPreference.x, 0);
            if (directionPreference.z > 0.9)
            {
                perp = new Vector3(0, directionPreference.z, -directionPreference.y);
            }
            Quaternion rt = Quaternion.AngleAxis((float)RandomGen3.NextDouble() * 360, directionPreference);
            perp = (rt * perp).normalized;
            float         angl = Mathf.PI * (1 - directionBias) * (float)RandomGen3.NextDouble();
            Vector3       dir  = (directionPreference * Mathf.Cos(angl) + perp * Mathf.Sin(angl)).normalized;
            ScatterPhoton pht  = new ScatterPhoton();
            // Debug.LogFormat("Derection:{0} {1}", dir, angl);
            pht.direction  = dir;
            pht.position   = emitPos;
            pht.timeOffset = timeOffset + duration * (float)RandomGen3.NextDouble();
            ret.Add(pht);
        }
        //  Debug.LogFormat("Emitted energy {0}", energy);
        return(ret);
    }
示例#2
0
    ScatterPhoton EmitCherenkovPhoton(Vector3 pos, float timeOffset)
    {
        float   shift = (float)RandomGen3.NextDouble();
        Vector3 perp  = new Vector3(-direction.y, direction.x, 0);

        if (Mathf.Abs(direction.z) > 0.9)
        {
            perp = new Vector3(0, direction.z, -direction.y);
        }
        Quaternion rt = Quaternion.AngleAxis(shift * 360, direction);

        perp  = rt * perp;
        perp /= perp.magnitude;
        Vector3       photondir = direction * cos41 + perp * sin41;
        ScatterPhoton ret       = new ScatterPhoton();

        ret.direction  = photondir;
        ret.position   = pos;
        ret.timeOffset = timeOffset;
        //ret.Propagate(IcecubeDust.getAbsorption(pos), IcecubeDust.getScatter(pos));
        return(ret);
    }