Beispiel #1
0
    void RefreshProjection()
    {
        ParticleEmitter emitter = GetComponent <ParticleEmitter>();

        emitter.ClearParticles();

        CGalaxy galaxy = CGalaxy.instance;

        if (galaxy && samplesPerAxis > 0)
        {
            Vector3 centreSample = new Vector3((samplesPerAxis - 1) * 0.5f, (samplesPerAxis - 1) * 0.5f, (samplesPerAxis - 1) * 0.5f);

            for (int x = 0; x < samplesPerAxis; ++x)
            {
                for (int y = 0; y < samplesPerAxis; ++y)
                {
                    for (int z = 0; z < samplesPerAxis; ++z)
                    {
                        Vector3          unitPos     = new Vector3(x - centreSample.x, y - centreSample.y, z - centreSample.z) / (0.5f * samplesPerAxis); // -1 to +1 on each axis.
                        CGalaxy.SCellPos sampleCell  = galaxy.AbsolutePointToAbsoluteCell(unitPos * galaxy.galaxyRadius);
                        float            noiseScalar = galaxy.SampleNoise_FogDensity(sampleCell);

                        if (noiseScalar > 0.0f)
                        {
                            emitter.Emit(unitPos * radius, Vector3.zero, particleScale * (radius * 2) / samplesPerAxis, float.PositiveInfinity, new Color(0.5f, 0.5f, 0.75f, noiseScalar * Mathf.Clamp01(1.0f - unitPos.magnitude * unitPos.magnitude * unitPos.magnitude)));
                        }
                    }
                }
            }

            mUpToDate = true;
        }
    }