Ejemplo n.º 1
0
        private void updateBasin()
        {
            // Reset collection
            basinVertices = new List <BasinVertex>();

            // Start eroding again
            erosionStrength = 1.0f;

            // Add source
            basinVertices.Add(source);

            int safe = 300;
            int step = 0;

            BasinVertex prev = source;

            // Gradient descent (gross sort of...)
            while (step < safe)
            {
                Vector3 p   = prev.position + 10 * prev.normal;
                Vector2 puv = T.worldToTerrainUV(p);
                Vector3 pn  = T.thisTerrain.terrainData.GetInterpolatedNormal(puv.x, puv.y);
                Vector3 pp  = T.terrainUVToWorld(puv);

                // Reached a local minimum?
                if (pn.y > minimaLimit)
                {
                    break;
                }

                BasinVertex v = new BasinVertex(pp, puv, pn);
                basinVertices.Add(v);

                prev = v;
                step++;
            }
        }