Esempio n. 1
0
    public void UpdateTerrain()
    {
        init();
        updateParams();

        // do the thing
        Debug.Log("[TerrainCreatorScript] About to render Terrain.");

        MaskMethod mask = null;

        if (mask_island)
        {
            mask = Mask.MaskMethods [(int)mask_type];
        }

        t.renderTerrain(mask, coloring);

        transform.GetComponent <MeshCollider> ().sharedMesh = t.Mesh;
        Debug.Log("Set shared mesh");

//		for (int i = 0; i < coloring.colorKeys.Length; i++) {
//			Debug.Log ("COLOR value : " + coloring.colorKeys [i].color);
//			Debug.Log ("COLOR time : " + coloring.colorKeys [i].time);
//
//		}
//
//		for (int i = 0; i < coloring.alphaKeys.Length; i++) {
//			Debug.Log ("ALPHA value : " + coloring.alphaKeys [i].alpha);
//			Debug.Log ("ALPHA time : " + coloring.alphaKeys [i].time);
//
//		}
//
//		Debug.Log ("MODE: " + coloring.mode.ToString ());
    }
Esempio n. 2
0
    public void SetHeights()
    {
        _terrain     = GetComponent <Terrain>();
        _terrainData = _terrain.terrainData;

        var resolution = _terrainData.heightmapResolution;

        var size = _terrainData.size * scale; // remember: y is height

        var point00 = transform.TransformPoint(new Vector3(0, 0, zOffset));
        var point10 = transform.TransformPoint(new Vector3(size.x, 0, zOffset));
        var point01 = transform.TransformPoint(new Vector3(0, size.z, zOffset));
        var point11 = transform.TransformPoint(new Vector3(size.x, size.z, zOffset));

        float maxDistance = Vector3.Distance(point00, point11) * 0.5f;
        var   center      = transform.TransformPoint(new Vector3(size.x * 0.5f, size.z * 0.5f, zOffset));

        // 3D noise
        NoiseMethod method = NoiseHelper.noiseMethods[(int)type][2];

        MaskMethod lowerMaskMethod = Masks.maskMethods[(int)lowerMask];
        MaskMethod upperMaskMethod = Masks.maskMethods[(int)upperMask];

        var heightArray = new float[resolution, resolution];
        var stepSize    = 1f / resolution;

        for (int y = 0; y < resolution; y++)
        {
            Vector3 point0 = Vector3.Lerp(point00, point01, (y + 0.5f) * stepSize);
            Vector3 point1 = Vector3.Lerp(point10, point11, (y + 0.5f) * stepSize);
            for (int x = 0; x < resolution; x++)
            {
                Vector3 point  = Vector3.Lerp(point0, point1, (x + 0.5f) * stepSize);
                float   sample = NoiseHelper.Sum(method, point, perlinNoiseSettings);
                if (type != NoiseMethodType.Value)
                {
                    sample = sample * 0.5f + 0.5f;
                }

                // Apply mask(s)
                float distance = Vector3.Distance(point, center);
                distance /= maxDistance;
                //sample = upperMaskMethod(distance) * sample;
                sample = lowerMaskMethod(distance) + sample * (upperMaskMethod(distance) - lowerMaskMethod(distance));

                heightArray[x, y] = sample * heightScale;
            }
        }

        _terrainData.SetHeights(0, 0, heightArray);
    }
Esempio n. 3
0
        //==============================================
        // DELEGATE FUNCTION

        public static float Transform(Vector3 p, float noise, MaskMethod m, float size = 1f)
        {
            if (m == null)
            {
                return(noise);
            }

            float distance = m(p, size);

            float max_width = size * 0.5f;
            float delta     = distance / max_width;
            float gradient  = delta * delta;

            noise *= Mathf.Max(0.0f, 1.0f - gradient);
            return(noise);
        }
Esempio n. 4
0
        //==============================================
        // Originally taken from TerrainCreatorScript

        public void renderTerrain(MaskMethod mask = null, Gradient coloring = null)
        {
            if (this.Mesh == null)
            {
                Debug.LogError("[GenericTerrain] Mesh should not be null!!!");
                return;
            }

            _debug("[renderTerrain] about to determine the vertices and colors for the terrain.");

            // get constants
            Vector3[] vecs = MeshUtil.Constants.UnitVectors2D;

            // extract parameters
            float dx = 1f / resolution;

            if (coloring == null)
            {
                coloring = Coloring;
            }

            // counter for vertices
            int v = 0;

            Colors   = this.Mesh.colors;
            Vertices = this.Mesh.vertices;

            for (int i = 0; i <= resolution; i++)
            {
                Vector3 p0 = Vector3.Lerp(vecs [0], vecs [2], i * dx);
                Vector3 p1 = Vector3.Lerp(vecs [1], vecs [3], i * dx);

                for (int j = 0; j <= resolution; j++)
                {
                    // localposition
                    Vector3 p = Vector3.Lerp(p0, p1, j * dx);

                    NoiseParams par = new NoiseParams {
                        p    = p,
                        v    = v,
                        mask = mask,
                    };

                    if (optimize)
                    {
                        OptController.RegisterTask(new Job {
                            func = noiseAsyncFunc,
                            par  = par,
                        });
                    }
                    else
                    {
                        noiseAsyncFunc(par);
                    }

                    v++;
                }
            }

            Debug.Log("Registered all tasks: " + OptController.jobQueue.Count.ToString());

            this.Texture.fill();
        }
Esempio n. 5
0
 public static float ApplyMask(MaskMethod method, float distance)
 {
     return(method(distance));
 }