コード例 #1
0
    void CreatePlane(int length, int width)
    {
        List <Vector3> vertices = new List <Vector3>();

        //Generate grid of vertices
        for (int x = 0; x <= length; x++)
        {
            for (int z = 0; z <= width; z++)
            {
                Vector3 noiseVert = new Vector3(((float)x) / rangex, ((float)z) / rangey, noiseAmt);
                vertices.Add(new Vector3(x * offset, Perlin.Noise(noiseVert) * intensity, z * offset));
            }
        }

        //Build Squares
        //Iterate through all but first x vert, all bust last y vert
        for (int x = 1; x <= length; x++)
        {
            for (int z = 0; z < length; z++)
            {
                mc.BuildTriangle(vertices[x * (width + 1) + (z + 1)], vertices[x * (width + 1) + z], vertices[(x - 1) * (width + 1) + (z + 1)]);
                mc.BuildTriangle(vertices[x * (width + 1) + z], vertices[(x - 1) * (width + 1) + z], vertices[(x - 1) * (width + 1) + (z + 1)]);
            }
        }

        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #2
0
    void CreateCube(Vector3 center)
    {
        Vector3 cubeSize = size * 0.5f;

        // top of the cube
        // t0 is top left point

        float x1 = center.x + cubeSize.x;
        float x2 = center.x - cubeSize.x;
        float x3 = center.x - cubeSize.x;
        float x4 = center.x + cubeSize.x;

        float z1 = center.z - cubeSize.z;
        float z2 = center.z - cubeSize.z;
        float z3 = center.z + cubeSize.z;
        float z4 = center.z + cubeSize.z;

        float height1 = center.y + cubeSize.y + bump * Perlin.Noise(x1 / FACTOR, z1 / FACTOR);
        float height2 = center.y + cubeSize.y + bump * Perlin.Noise(x2 / FACTOR, z2 / FACTOR);
        float height3 = center.y + cubeSize.y + bump * Perlin.Noise(x3 / FACTOR, z3 / FACTOR);
        float height4 = center.y + cubeSize.y + bump * Perlin.Noise(x4 / FACTOR, z4 / FACTOR);

        Vector3 t0 = new Vector3(x1, height1, z1);
        Vector3 t1 = new Vector3(x2, height2, z2);
        Vector3 t2 = new Vector3(x3, height3, z3);
        Vector3 t3 = new Vector3(x4, height4, z4);

        // bottom of the cube
        //Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        //Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        //Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        //Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        //// Bottom square
        //mc.BuildTriangle(b2, b1, b0);
        //mc.BuildTriangle(b3, b2, b0);

        //// Back square
        //mc.BuildTriangle(b0, t1, t0);
        //mc.BuildTriangle(b0, b1, t1);

        //mc.BuildTriangle(b1, t2, t1);
        //mc.BuildTriangle(b1, b2, t2);

        //mc.BuildTriangle(b2, t3, t2);
        //mc.BuildTriangle(b2, b3, t3);

        //mc.BuildTriangle(b3, t0, t3);
        //mc.BuildTriangle(b3, b0, t0);
    }
コード例 #3
0
    void Update()
    {
        mc.Clear();

        // add vertices
        for (int i = 0; i <= width; i++)
        {
            float x = i * squareSize;
            for (int j = 0; j <= depth; j++)
            {
                float z = j * squareSize;

                // compute noise at given space time point
                float noiseOut = Perlin.Noise(noiseScale.x * i, noiseScale.y * Time.time, noiseScale.z * j);

                // normalize noise
                noiseOut += 1;
                noiseOut /= 2;

                // compute y-value from noise
                float y = noiseOut * maxHeight;

                // compute uv
                float u = (float)i / width;
                float v = (float)j / depth;

                // compute color from noise

                Color color = minColor + noiseOut * (maxColor - minColor);

                // add the vertex
                vertices[i, j] = new ColoredPoint(x, y, z, color.r, color.g, color.b);
            }
        }

        // build triangles out of those vertices
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < depth; j++)
            {
                ColoredPoint a = vertices[i, j];
                ColoredPoint b = vertices[i + 1, j];
                ColoredPoint c = vertices[i, j + 1];
                ColoredPoint d = vertices[i + 1, j + 1];

                mc.BuildTriangle(d, b, a);
                mc.BuildTriangle(c, d, a);
            }
        }

        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #4
0
    void Update()
    {
        Vector3[] vertices = new Vector3[latitudeLineCount * longitudeLineCount];
        int       vtxIndex = 0;

        for (int j = 0; j < latitudeLineCount; j++)
        {
            float lat = 180 * ((float)(j + 1) / latitudeLineCount);

            for (int i = 0; i < longitudeLineCount; i++)
            {
                float lon = 360 * ((float)i / longitudeLineCount);

                Vector3 cartesian = new Vector3(
                    radius * Mathf.Cos(lat) * Mathf.Cos(lon),
                    radius * Mathf.Cos(lat) * Mathf.Sin(lon),
                    radius * Mathf.Sin(lat)
                    );

                vertices[vtxIndex++] = cartesian;
            }
        }

        MeshCreator mc = new MeshCreator();

        for (int i = 2; i < vertices.Length; i++)
        {
            mc.BuildTriangle(vertices[i - 2], vertices[i - 1], vertices[i]);
        }

        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #5
0
ファイル: PerlinPlane.cs プロジェクト: jhusting/BowWow
    void GenerateMesh(MeshCreator mc)
    {
        for (int i = 0; i < size; ++i)
        {
            for (int j = 0; j < size; ++j)
            {
                verts[i][j].y = CalculateHeight(i, j);
            }
        }

        for (int i = 0; i < size - 1; ++i)
        {
            for (int j = 0; j < size - 1; ++j)
            {
                mc.BuildTriangle(verts[i][j], verts[i + 1][j], verts[i + 1][j + 1]);
                mc.BuildTriangle(verts[i][j], verts[i + 1][j + 1], verts[i][j + 1]);
            }
        }
    }
コード例 #6
0
    private void GenerateTerrainMesh()
    {
        // Generate Squares
        for (int x = 0; x < meshWidth; x++)
        {
            for (int y = 0; y < meshLength; y++)
            {
                // Create Vertices
                Vector3 t0 = new Vector3(squareSize.x / 2, 0, -squareSize.y / 2);  // top left
                Vector3 t1 = new Vector3(-squareSize.x / 2, 0, -squareSize.y / 2); // bottom left
                Vector3 t2 = new Vector3(-squareSize.x / 2, 0, squareSize.y / 2);  // bottom right
                Vector3 t3 = new Vector3(squareSize.x / 2, 0, squareSize.y / 2);   // top right

                // Shift Vertices to match point on mesh
                Vector3 offset = new Vector3(x * squareSize.x, 0, y * squareSize.y);
                t0 += offset;
                t1 += offset;
                t2 += offset;
                t3 += offset;

                // Add perlin variable to heights
                t0.y = Mathf.PerlinNoise(t0.x * perlinScaleFactor, t0.z * perlinScaleFactor) * heightStretchFactor;
                t1.y = Mathf.PerlinNoise(t1.x * perlinScaleFactor, t1.z * perlinScaleFactor) * heightStretchFactor;
                t2.y = Mathf.PerlinNoise(t2.x * perlinScaleFactor, t2.z * perlinScaleFactor) * heightStretchFactor;
                t3.y = Mathf.PerlinNoise(t3.x * perlinScaleFactor, t3.z * perlinScaleFactor) * heightStretchFactor;

                // Todo - Make volcanos
                float volcanoModifiedHeight = volcanoHeight * heightStretchFactor;
                t0.y = t0.y > volcanoModifiedHeight ? t0.y - (t0.y - volcanoModifiedHeight) * volcanoDipFactor : t0.y;
                t1.y = t1.y > volcanoModifiedHeight ? t1.y - (t1.y - volcanoModifiedHeight) * volcanoDipFactor : t1.y;
                t2.y = t2.y > volcanoModifiedHeight ? t2.y - (t2.y - volcanoModifiedHeight) * volcanoDipFactor : t2.y;
                t3.y = t3.y > volcanoModifiedHeight ? t3.y - (t3.y - volcanoModifiedHeight) * volcanoDipFactor : t3.y;

                // Builds Triangle
                _meshCreator.BuildTriangle(t0, t1, t2);
                _meshCreator.BuildTriangle(t0, t2, t3);
            }
        }

        // Build Mesh
        _meshFilter.mesh = _meshCreator.CreateMesh();
    }
コード例 #7
0
    protected void CreateTerrainSqure(int x, int y)
    {
        Vector3 scaledSize = cubeSize * 0.5f;
        Vector3 center     = new Vector3(x * cubeSize.x, 0, y * cubeSize.z);

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + scaledSize.x, center.y + scaledSize.y, center.z - scaledSize.z);
        Vector3 t1 = new Vector3(center.x - scaledSize.x, center.y + scaledSize.y, center.z - scaledSize.z);
        Vector3 t2 = new Vector3(center.x - scaledSize.x, center.y + scaledSize.y, center.z + scaledSize.z);
        Vector3 t3 = new Vector3(center.x + scaledSize.x, center.y + scaledSize.y, center.z + scaledSize.z);

        // Apply perlin noise to every vertice by mapping the coordinates to perlin range
        t0.y = Perlin.Noise(t0.x / width * 5 + perlinXValue, t0.z / width * 5 + perlinYValue) * scale;
        t1.y = Perlin.Noise(t1.x / width * 5 + perlinXValue, t1.z / width * 5 + perlinYValue) * scale;
        t2.y = Perlin.Noise(t2.x / width * 5 + perlinXValue, t2.z / width * 5 + perlinYValue) * scale;
        t3.y = Perlin.Noise(t3.x / width * 5 + perlinXValue, t3.z / width * 5 + perlinYValue) * scale;

        // Top square
        meshCreator.BuildTriangle(t0, t1, t2);
        meshCreator.BuildTriangle(t0, t2, t3);
    }
コード例 #8
0
    private void Start()
    {
        MeshFilter  meshFilter = this.GetComponent <MeshFilter>();
        MeshCreator mc         = new MeshCreator(); // one submesh for each face

        Vector3 cubeSize = size * 0.5f;

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(cubeSize.x, cubeSize.y, -cubeSize.z);
        Vector3 t1 = new Vector3(-cubeSize.x, cubeSize.y, -cubeSize.z);
        Vector3 t2 = new Vector3(-cubeSize.x, cubeSize.y, cubeSize.z);
        Vector3 t3 = new Vector3(cubeSize.x, cubeSize.y, cubeSize.z);

        // bottom of the cube
        Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z);
        Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);

        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #9
0
    // Update is called once per frame
    void Update()
    {
        mc.ListClear();
        //if (factor > 1) { inc = false; }
        //if (factor < -1) { inc = true; }
        /*if (inc) {*/
        factor   += Time.deltaTime * 0.4f;
        keyTimer += Time.deltaTime;
        //}
        //else if (!inc) { factor -= 0.005f; }
        for (int i = 0; i < 40; ++i)
        {
            for (int j = 0; j < 40; ++j)
            {
                cubeSize = size * 0.5f;
                key(i, j);
                if (!MusicOn)
                {
                    NoiseAnim(i, j);
                    this.GetComponent <AudioSource>().enabled = false;
                }
                if (MusicOn)
                {
                    this.GetComponent <AudioSource>().enabled = true;
                    SoundAnim(i, j);
                }

                // top of the cube
                // t0 is top left point
                Vector3 t0 = new Vector3(cubeSize.x + size.x * i * 1.2f, coordy, -cubeSize.z + size.z * j * 1.2f);
                Vector3 t1 = new Vector3(-cubeSize.x + size.x * i * 1.2f, coordy, -cubeSize.z + size.z * j * 1.2f);
                Vector3 t2 = new Vector3(-cubeSize.x + size.x * i * 1.2f, coordy, cubeSize.z + size.z * j * 1.2f);
                Vector3 t3 = new Vector3(cubeSize.x + size.x * i * 1.2f, coordy, cubeSize.z + size.z * j * 1.2f);
                // bottom of the cube
                Vector3 b0 = new Vector3(cubeSize.x + size.x * i * 1.2f, -cubeSize.y, -cubeSize.z + size.z * j * 1.2f);
                Vector3 b1 = new Vector3(-cubeSize.x + size.x * i * 1.2f, -cubeSize.y, -cubeSize.z + size.z * j * 1.2f);
                Vector3 b2 = new Vector3(-cubeSize.x + size.x * i * 1.2f, -cubeSize.y, cubeSize.z + size.z * j * 1.2f);
                Vector3 b3 = new Vector3(cubeSize.x + size.x * i * 1.2f, -cubeSize.y, cubeSize.z + size.z * j * 1.2f);
                //Debug.Log(t0);
                //Debug.Log(Perlin.Noise(t0));
                //Debug.Log(Perlin.Noise(100, 100, Random.Range(0, 1000) * 0.1f));

                // Top square
                mc.BuildTriangle(t0, t1, t2);
                mc.BuildTriangle(t0, t2, t3);
                // Bottom square
                mc.BuildTriangle(b2, b1, b0);
                mc.BuildTriangle(b3, b2, b0);
                // Back square
                mc.BuildTriangle(b0, t1, t0);
                mc.BuildTriangle(b0, b1, t1);
                mc.BuildTriangle(b1, t2, t1);
                mc.BuildTriangle(b1, b2, t2);
                mc.BuildTriangle(b2, t3, t2);
                mc.BuildTriangle(b2, b3, t3);
                mc.BuildTriangle(b3, t0, t3);
                mc.BuildTriangle(b3, b0, t0);
            }
        }

        if (coordy > 20f)
        {
            GameObject instR = Instantiate(ring, new Vector3(-50, coordy, 0), Quaternion.identity);
            Destroy(instR, 5f);
            if (coordy > 30f)
            {
                GameObject instF = Instantiate(firework, new Vector3(-50, coordy, 0), Quaternion.identity);
                Destroy(instF, 10f);
            }
        }
        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #10
0
    void CreateCube(Vector3 center, float height)
    {
        Vector3 cubeSize = size * 0.5f;

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + height, center.z - cubeSize.z);
        Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + height, center.z - cubeSize.z);
        Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + height, center.z + cubeSize.z);
        Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + height, center.z + cubeSize.z);

        // bottom of the cube
        Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);
    }
コード例 #11
0
    void CreateCube(Vector3 center)
    {
        Vector3 cubeSize = size * 0.5f;

        // Call the noise function
        //float offsetY = Perlin.Noise(center.x / 20, center.y / 20, center.z / 20);
        //float offsetY = Perlin.Noise(Random.Range(.1f,.5f)/15, Random.Range(.1f, .5f)/15, Random.Range(.1f, .5f)/15);
        float offsetY = Perlin.Noise(center.x / 20 + Random.Range(0.1f, 10f), center.y / 20 + Random.Range(0.1f, 10f), center.z / 20 + Random.Range(0.1f, 10f));

        //float offsetY = Perlin.Noise((center.x + Random.Range(0.1f, 10f))/20, (center.y / 20 + Random.Range(0.1f, 10f))/20, (center.z / 20 + Random.Range(0.1f, 10f))/20);

        //float offsetY = Perlin.Noise(center.x, center.y, center.z);
        //float offsetZ = Perlin.Noise(center.x, center.y, center.z);

        Debug.Log("this is" + offsetY);
        if (partSpawn)
        {
            GameObject deatheffect = (GameObject)Instantiate(particleDeathEffect, center, Quaternion.identity);
            Destroy(deatheffect, 5f);
        }

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + offsetY, center.z - cubeSize.z);
        Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + offsetY, center.z - cubeSize.z);
        Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + offsetY, center.z + cubeSize.z);
        Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + offsetY, center.z + cubeSize.z);

        // bottom of the cube
        Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);
    }
コード例 #12
0
    void CreateCube(Vector3 center, float x, float z, int row, int col)
    {
        Vector3 cubeSize = size * sizeMultiplier;

        float heightInc = 0;

        if (!canBeAnimated)
        {
            heightInc = .9f * Perlin.Noise(x / 10, z / 10);
        }
        else
        {
            heightInc = .9f * Perlin.Noise(x + 1, (z + 1) * Time.realtimeSinceStartup / animateSpeed);
        }

        // heightInc = Mathf.Clamp(Perlin.Noise(x , z * Time.realtimeSinceStartup), 0.05f, 0.2f);


        if (animateVFX)
        {
            if (heightInc > 0.3f)
            {
                if (vfxList[row, col].GetComponent <ParticleSystem>())
                {
                    vfxList[row, col].GetComponent <ParticleSystem>().Play();
                    vfxList[row, col].GetComponent <ParticleSystem>().startSpeed = heightInc * 10;
                }
            }
            else
            {
                if (vfxList[row, col].GetComponent <ParticleSystem>())
                {
                    vfxList[row, col].GetComponent <ParticleSystem>().Stop();
                }
            }
        }

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + heightInc * oriHeight, center.z - cubeSize.z);
        Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + heightInc * oriHeight, center.z - cubeSize.z);
        Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + heightInc * oriHeight, center.z + cubeSize.z);
        Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + heightInc * oriHeight, center.z + cubeSize.z);
        // bottom of the cube
        Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);

        if (center.y + heightInc * oriHeight < 0)
        {
            t0 = new Vector3(center.x + cubeSize.x, center.y, center.z - cubeSize.z);
            t1 = new Vector3(center.x - cubeSize.x, center.y, center.z - cubeSize.z);
            t2 = new Vector3(center.x - cubeSize.x, center.y, center.z + cubeSize.z);
            t3 = new Vector3(center.x + cubeSize.x, center.y, center.z + cubeSize.z);

            b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z - cubeSize.z);
            b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z - cubeSize.z);
            b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z + cubeSize.z);
            b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z + cubeSize.z);
        }
        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);
    }
コード例 #13
0
    private void FixedUpdate()
    {
        timer += Time.deltaTime * timeMod;

        if (timer > 255)
        {
            timer = 0;
        }


        MeshFilter  meshFilter = this.GetComponent <MeshFilter>();  // one submesh for each face
        MeshCreator mc         = new MeshCreator();

        Vector3 cubeSize = size * 0.5f;

        float noiseValueT0 = Perlin.Noise((pos.x + cubeSize.x) / posMod, (pos.y - cubeSize.z) / posMod, timer);
        float noiseValueT1 = Perlin.Noise((pos.x - cubeSize.x) / posMod, (pos.y - cubeSize.z) / posMod, timer);
        float noiseValueT2 = Perlin.Noise((pos.x - cubeSize.x) / posMod, (pos.y + cubeSize.z) / posMod, timer);
        float noiseValueT3 = Perlin.Noise((pos.x + cubeSize.x) / posMod, (pos.y + cubeSize.z) / posMod, timer);
        //float noiseValueT0 = Perlin.Noise((pos.x + cubeSize.x) * posMod, (pos.y - cubeSize.z) * posMod, timer);
        //float noiseValueT1 = Perlin.Noise((pos.x - cubeSize.x) * posMod, (pos.y - cubeSize.z) * posMod, timer);
        //float noiseValueT2 = Perlin.Noise((pos.x - cubeSize.x) * posMod, (pos.y + cubeSize.z) * posMod, timer);
        //float noiseValueT3 = Perlin.Noise((pos.x + cubeSize.x) * posMod, (pos.y + cubeSize.z) * posMod, timer);

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(cubeSize.x, cubeSize.y + modifier * noiseValueT0, -cubeSize.z);
        Vector3 t1 = new Vector3(-cubeSize.x, cubeSize.y + modifier * noiseValueT1, -cubeSize.z);
        Vector3 t2 = new Vector3(-cubeSize.x, cubeSize.y + modifier * noiseValueT2, cubeSize.z);
        Vector3 t3 = new Vector3(cubeSize.x, cubeSize.y + modifier * noiseValueT3, cubeSize.z);

        // bottom of the cube
        Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z);
        Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);

        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #14
0
    // Update is called once per frame
    void Update()
    {
        float[] spectrum = new float[256];
        AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular);


        MeshFilter meshFilter = this.GetComponent <MeshFilter>();
        Mesh       mesh       = this.GetComponent <MeshFilter>().mesh;

        Vector3[] vertices = mesh.vertices;


        // one submesh for each face
        Vector3 center = new Vector3(0, 0, 0);

        mc.Clear(); // Clear internal lists and mesh

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            resize++;
        }
        if (Input.GetKeyDown(KeyCode.DownArrow) && resize > 1.0f)
        {
            resize--;
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            distance += 0.1f;
        }
        if (Input.GetKeyDown(KeyCode.LeftArrow) && distance > 1.2f)
        {
            distance -= 0.1f;
        }
        if (Input.GetKeyDown(KeyCode.A))
        {
            for (int i = 0; i < vertices.Length; i++)
            {
                this.GetComponent <MeshRenderer>().material.color = Color.Lerp(Color.yellow, Color.blue, vertices[i].y);
            }
        }


        for (int j = 0; j < 20; j++)
        {
            for (int i = 0; i < 20; i++)
            {
                Vector3 cubeSize = size * 0.5f;
                //float timepass = 0;
                float timepass = Time.deltaTime * 20f;
                //timepass +=Time.deltaTime* 10.0f;

                float noisy = cubeSize.y + Perlin.Noise(cubeSize.x + size.x * i * 0.12f * spectrum[i] * 100.0f + timepass, 0, -cubeSize.z + size.z * j * 0.12f * spectrum[i] * 100.0f + timepass);
                //float noisy = cubeSize.y + Perlin.Noise(cubeSize.x + size.x * i * 0.12f + timepass, 0, -cubeSize.z + size.z * j * 0.12f + timepass);

                // top of the cube
                // t0 is top left point
                Vector3 t0 = new Vector3(cubeSize.x + size.x * i * distance, noisy * resize, -cubeSize.z + size.z * j * distance);
                Vector3 t1 = new Vector3(-cubeSize.x + size.x * i * distance, noisy * resize, -cubeSize.z + size.z * j * distance);
                Vector3 t2 = new Vector3(-cubeSize.x + size.x * i * distance, noisy * resize, cubeSize.z + size.z * j * distance);
                Vector3 t3 = new Vector3(cubeSize.x + size.x * i * distance, noisy * resize, cubeSize.z + size.z * j * distance);

                // bottom of the cube
                Vector3 b0 = new Vector3(cubeSize.x + size.x * i * distance, -cubeSize.y, -cubeSize.z + size.z * j * distance);
                Vector3 b1 = new Vector3(-cubeSize.x + size.x * i * distance, -cubeSize.y, -cubeSize.z + size.z * j * distance);
                Vector3 b2 = new Vector3(-cubeSize.x + size.x * i * distance, -cubeSize.y, cubeSize.z + size.z * j * distance);
                Vector3 b3 = new Vector3(cubeSize.x + size.x * i * distance, -cubeSize.y, cubeSize.z + size.z * j * distance);

                // Top square
                mc.BuildTriangle(t0, t1, t2);
                mc.BuildTriangle(t0, t2, t3);

                // Bottom square
                mc.BuildTriangle(b2, b1, b0);
                mc.BuildTriangle(b3, b2, b0);

                // Back square
                mc.BuildTriangle(b0, t1, t0);
                mc.BuildTriangle(b0, b1, t1);

                mc.BuildTriangle(b1, t2, t1);
                mc.BuildTriangle(b1, b2, t2);

                mc.BuildTriangle(b2, t3, t2);
                mc.BuildTriangle(b2, b3, t3);

                mc.BuildTriangle(b3, t0, t3);
                mc.BuildTriangle(b3, b0, t0);

                meshFilter.mesh = mc.CreateMesh();

                if (noisy > 1.1f)
                {
                    Instantiate(particlesystem, new Vector3(i * 2.0F, noisy * resize * 2, 0), Quaternion.identity);
                }
            }
        }
    }
コード例 #15
0
    private void Update()
    {
        center = transform.position;
        MeshFilter  meshFilter = this.GetComponent <MeshFilter>();
        MeshCreator mc         = new MeshCreator(center);

        timer += Time.deltaTime * timeMod;
        if (timer > timeMod * 5)
        {
            usingNoise = true;
        }
        if (timer > 255)
        {
            timer = 0;
        }

        float noiseValue;

        float t = (radius + Mathf.Sqrt(5f)) / 2f;

        List <Vector3> verts = new List <Vector3>();

        verts.Add(new Vector3(-radius, t, 0));
        verts.Add(new Vector3(radius, t, 0));
        verts.Add(new Vector3(-radius, -t, 0));
        verts.Add(new Vector3(radius, -t, 0));


        verts.Add(new Vector3(0, -radius, t));
        verts.Add(new Vector3(0, radius, t));
        verts.Add(new Vector3(0, -radius, -t));
        verts.Add(new Vector3(0, radius, -t));


        verts.Add(new Vector3(t, 0, -radius));
        verts.Add(new Vector3(t, 0, radius));
        verts.Add(new Vector3(-t, 0, -radius));
        verts.Add(new Vector3(-t, 0, radius));



        if (usingNoise)
        {
            for (int i = 0; i < verts.Count; i++)
            {
                noiseValue = Perlin.Noise(verts[i].x, verts[i].y, timer);
                verts[i]  += (center - verts[i]).normalized * noiseValue * scaler;
            }
        }

        mc.BuildTriangle(verts[5], verts[11], verts[0]);
        mc.BuildTriangle(verts[1], verts[5], verts[0]);
        mc.BuildTriangle(verts[7], verts[1], verts[0]);
        mc.BuildTriangle(verts[10], verts[7], verts[0]);
        mc.BuildTriangle(verts[11], verts[10], verts[0]);

        mc.BuildTriangle(verts[9], verts[5], verts[1]);
        mc.BuildTriangle(verts[4], verts[11], verts[5]);
        mc.BuildTriangle(verts[2], verts[10], verts[11]);
        mc.BuildTriangle(verts[6], verts[7], verts[10]);
        mc.BuildTriangle(verts[8], verts[1], verts[7]);

        mc.BuildTriangle(verts[4], verts[9], verts[3]);
        mc.BuildTriangle(verts[2], verts[4], verts[3]);
        mc.BuildTriangle(verts[6], verts[2], verts[3]);
        mc.BuildTriangle(verts[8], verts[6], verts[3]);
        mc.BuildTriangle(verts[9], verts[8], verts[3]);

        mc.BuildTriangle(verts[5], verts[9], verts[4]);
        mc.BuildTriangle(verts[11], verts[4], verts[2]);
        mc.BuildTriangle(verts[10], verts[2], verts[6]);
        mc.BuildTriangle(verts[7], verts[6], verts[8]);
        mc.BuildTriangle(verts[1], verts[8], verts[9]);



        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #16
0
    void CreateCube(Vector3 center, int i)
    {
        Vector3 cubeSize  = size * 0.15f;
        float   heightInc = 0;

        if (m_audioTester)
        {
            heightInc = 10 * Mathf.Abs(Perlin.Noise((i + 1) * m_audioTester.clipLoudness / 100));
        }
        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + heightInc, center.z - cubeSize.z);
        Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + heightInc, center.z - cubeSize.z);
        Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + heightInc, center.z + cubeSize.z);
        Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + heightInc, center.z + cubeSize.z);
        // bottom of the cube
        Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);
    }
コード例 #17
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            scale += 4;
            Debug.Log("Scale: " + scale);
        }
        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            scale -= 4;
            Debug.Log("Scale: " + scale);
        }
        mc.cleanUp();
        timer += Time.deltaTime / 2;
        if (timer > 255)
        {
            timer = 0;
        }
        MeshFilter   meshFilter   = this.GetComponent <MeshFilter>();
        MeshCollider meshCollider = this.GetComponent <MeshCollider>();
        // one submesh for each face
        Vector3 cubeSize = size * 0.5f;

        // top of the cube
        // t0 is top left point
        float perlinX1 = (transform.position.x + cubeSize.x) / scale;
        float perlinX2 = (transform.position.x - cubeSize.x) / scale;

        float perlinY1 = (transform.position.z - cubeSize.z) / scale;
        float perlinY2 = (transform.position.z + cubeSize.z) / scale;

        //Calculate each top vertex height individually
        float height1 = Perlin.Noise(perlinX1, perlinY1, timer) * 1.2f + 0.9f;
        float height2 = Perlin.Noise(perlinX2, perlinY1, timer) * 1.2f + 0.9f;
        float height3 = Perlin.Noise(perlinX2, perlinY2, timer) * 1.2f + 0.9f;
        float height4 = Perlin.Noise(perlinX1, perlinY2, timer) * 1.2f + 0.9f;

        Vector3 position = GetComponentInChildren <ParticleSystem>().GetComponentInParent <Transform>().position;

        GetComponentInChildren <ParticleSystem>().GetComponentInParent <Transform>().position = new Vector3(position.x, ((height1 + height2 + height3 + height4) / 4f), position.z);

        if ((((height1 + height2 + height3 + height4) / 4f) > 1.2f) && !GetComponentInChildren <ParticleSystem>().isPlaying)
        {
            GetComponentInChildren <ParticleSystem>().Play();
        }

        Vector3 t0 = new Vector3(cubeSize.x, height1, -cubeSize.z);
        Vector3 t1 = new Vector3(-cubeSize.x, height2, -cubeSize.z);
        Vector3 t2 = new Vector3(-cubeSize.x, height3, cubeSize.z);
        Vector3 t3 = new Vector3(cubeSize.x, height4, cubeSize.z);
        // bottom of the cube
        Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z);
        Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);
        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);
        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);
        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);
        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);
        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);

        meshFilter.mesh.Clear();
        Destroy(oldMesh);
        oldMesh = mc.CreateMesh();
        meshCollider.sharedMesh = oldMesh;
        meshFilter.mesh         = oldMesh;
    }
コード例 #18
0
    void Update()
    {
        mc.Clear();

        Vector3 cubeSize = size * 0.5f;

        // top of the cube
        Vector3 t0 = new Vector3(cubeSize.x, cubeSize.y, -cubeSize.z);
        Vector3 t1 = new Vector3(-cubeSize.x, cubeSize.y, -cubeSize.z);
        Vector3 t2 = new Vector3(-cubeSize.x, cubeSize.y, cubeSize.z);
        Vector3 t3 = new Vector3(cubeSize.x, cubeSize.y, cubeSize.z);

        // bottom of the cube
        Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z);
        Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z);
        Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z);

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        mc.BuildTriangle(b2, b1, b0);
        mc.BuildTriangle(b3, b2, b0);

        // Back square
        mc.BuildTriangle(b0, t1, t0);
        mc.BuildTriangle(b0, b1, t1);

        mc.BuildTriangle(b1, t2, t1);
        mc.BuildTriangle(b1, b2, t2);

        mc.BuildTriangle(b2, t3, t2);
        mc.BuildTriangle(b2, b3, t3);

        mc.BuildTriangle(b3, t0, t3);
        mc.BuildTriangle(b3, b0, t0);

        meshFilter.mesh = mc.CreateMesh();
    }
コード例 #19
0
    void CreateCube(Vector3 center, float x, float z, int row, int col)
    {
        Vector3 cubeSize = size * sizeMultiplier;

        float heightInc = 0;

        heightInc = .9f * bumpiness * Perlin.Noise((x + 1) / scale, (z + 1) / scale);

        if (heightInc > 3)
        {
            //for (int i = -3; i < 3; i++)
            //{
            //    for (int j = -3; j < 3; j++)
            //    {
            //        CreateCube(center, x, z, i, j);
            //    }
            //}
        }

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + heightInc * bumpiness, center.z - cubeSize.z);
        Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + heightInc * bumpiness, center.z - cubeSize.z);
        Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + heightInc * bumpiness, center.z + cubeSize.z);
        Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + heightInc * bumpiness, center.z + cubeSize.z);
        // bottom of the cube
        Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);


        if (center.y + heightInc * bumpiness < 0)
        {
            t0 = new Vector3(center.x + cubeSize.x, center.y, center.z - cubeSize.z);
            t1 = new Vector3(center.x - cubeSize.x, center.y, center.z - cubeSize.z);
            t2 = new Vector3(center.x - cubeSize.x, center.y, center.z + cubeSize.z);
            t3 = new Vector3(center.x + cubeSize.x, center.y, center.z + cubeSize.z);

            b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z - cubeSize.z);
            b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z - cubeSize.z);
            b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z + cubeSize.z);
            b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z + cubeSize.z);
        }

        // Top square
        mc.BuildTriangle(t0, t1, t2);
        mc.BuildTriangle(t0, t2, t3);

        // Bottom square
        //mc.BuildTriangle(b2, b1, b0);
        //mc.BuildTriangle(b3, b2, b0);

        //// Back square
        //mc.BuildTriangle(b0, t1, t0);
        //mc.BuildTriangle(b0, b1, t1);

        //mc.BuildTriangle(b1, t2, t1);
        //mc.BuildTriangle(b1, b2, t2);

        //mc.BuildTriangle(b2, t3, t2);
        //mc.BuildTriangle(b2, b3, t3);

        //mc.BuildTriangle(b3, t0, t3);
        //mc.BuildTriangle(b3, b0, t0);
    }
コード例 #20
0
    protected void CreateCube(Vector3 center, float time)
    {
        Vector3 cubeSize = Vector3.one * 0.5f;

        float noise = GenerateNoise();

        // top of the cube
        // t0 is top left point
        Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + noise, center.z - cubeSize.z);
        Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + noise, center.z - cubeSize.z);
        Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + noise, center.z + cubeSize.z);
        Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + noise, center.z + cubeSize.z);

        // bottom of the cube
        Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z);
        Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);
        Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z);

        // Top square
        meshCreator.BuildTriangle(t0, t1, t2);
        meshCreator.BuildTriangle(t0, t2, t3);

        // Bottom square
        meshCreator.BuildTriangle(b2, b1, b0);
        meshCreator.BuildTriangle(b3, b2, b0);

        // Back square
        meshCreator.BuildTriangle(b0, t1, t0);
        meshCreator.BuildTriangle(b0, b1, t1);

        meshCreator.BuildTriangle(b1, t2, t1);
        meshCreator.BuildTriangle(b1, b2, t2);

        meshCreator.BuildTriangle(b2, t3, t2);
        meshCreator.BuildTriangle(b2, b3, t3);

        meshCreator.BuildTriangle(b3, t0, t3);
        meshCreator.BuildTriangle(b3, b0, t0);
    }