Beispiel #1
0
    List <Vector2> DrawNoise(Vector2 anchorOff, float x, float z)
    {
        List <Vector2> ModifiedChunks = new List <Vector2>();

        GeneratePerlin perScript = GetComponent <GeneratePerlin> ();

        for (int i = 0; i < (int)m_allLinkedAttributes.GetAttribute <Vector2> ("BrushArrayDimensions").x; ++i)
        {
            for (int j = 0; j < (int)m_allLinkedAttributes.GetAttribute <Vector2> ("BrushArrayDimensions").y; ++j)
            {
                if (m_brushArray [i, j] != 0)                   //Reject if brush has no influence
                {
                    foreach (Vector2 chunkCoord in perScript.PaintPerlinNoise(Mathf.RoundToInt(x) + i - (int)anchorOff.x, Mathf.RoundToInt(z) + j - (int)anchorOff.y, (m_brushArray[i, j] * m_allLinkedAttributes.GetAttribute <float>("BrushWeight") * m_AdditivePower)))
                    {
                        if (!ModifiedChunks.Contains(chunkCoord))
                        {
                            ModifiedChunks.Add(chunkCoord);
                        }
                    }
                }
            }
        }

        return(ModifiedChunks);
    }
Beispiel #2
0
    void Start()
    {
        tunnelCollider = GetComponent <MeshCollider> ();
        perlin         = GetComponent <GeneratePerlin> ();
        generateMesh   = GetComponent <GenerateMesh> ();

        Mesh mesh = new Mesh();

        GetComponent <MeshFilter> ().mesh = mesh;

        // Create Perlin Noise
        double[,] noiseX = perlin.GenerateNoise(TunnelLength, PerlinWormsOctave, 0);
        double[,] noiseY = perlin.GenerateNoise(TunnelLength, PerlinWormsOctave, 3);

        // Creates Perlin Worm vectors
        Vector3[] vectors = CreateTunnel(TunnelLength, new Vector3(0, 5, 0), noiseX, noiseY);

        // Generates Mesh
        Vector3[] testVector = { new Vector3(0, 3, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, 1) };
        Vector3[] vertices   = generateMesh.CreateMesh(testVector, VoxelSize, SegmentSize, Radius, Degree);
        int[]     triangles  = generateMesh.CalculateIndices(vertices, Degree * 3 * SegmentSize * 3);     // <- Tunnel Length

        // Set mesh data
        mesh.vertices  = vertices;
        mesh.triangles = triangles;
        mesh.RecalculateBounds();
        mesh.RecalculateNormals();

        // Set Collider
        tunnelCollider.sharedMesh = mesh;
        tunnelCollider.sharedMesh.RecalculateNormals();
        tunnelCollider.sharedMesh.RecalculateBounds();
    }
Beispiel #3
0
    public void createCube(int[,] seedGrid, int seedX, int seedY, int numVoxels, float voxelSize)
    {
        NumberOfVoxels = numVoxels;
        VoxelSize      = voxelSize;

        perlin          = GetComponent <GeneratePerlin> ();
        generateMesh    = GetComponent <GenerateMesh> ();
        terrainCollider = GetComponent <MeshCollider> ();

        mesh = new Mesh();
        GetComponent <MeshFilter> ().mesh = mesh;

        // Create Perlin Noise
        double[,] baseNoise = perlin.GenerateNoise(NumberOfVoxels, PerlinNoiseOctave, seedGrid[seedX, seedY]);
        noise = perlin.InterpolateNoise(baseNoise, seedGrid, seedX, seedY, PerlinNoiseOctave);

        // Generate Mesh
        Vector3[] vertices  = generateMesh.CreateMesh(noise, VoxelSize, 0, MaxHeight);
        int[]     triangles = generateMesh.CalculateIndices(vertices, (noise.GetLength(0) - 1) * (noise.GetLength(0) - 1));

        // Set up mesh data
        mesh.vertices  = vertices;
        mesh.triangles = triangles;
        mesh.RecalculateBounds();
        mesh.RecalculateNormals();

        // Set up collider
        terrainCollider.sharedMesh = mesh;
        terrainCollider.sharedMesh.RecalculateNormals();
        terrainCollider.sharedMesh.RecalculateBounds();
    }