Exemple #1
0
    void Initialize()
    {
        if (_ShapeGenerator == null)
        {
            _ShapeGenerator = new PlanetShapeGenerator(_ShapeSettings);
        }

        if (_MeshFilters == null || _MeshFilters.Length == 0)
        {
            _MeshFilters = new MeshFilter[6];
        }

        _TerrainFaces = new TerrainFace[6];

        Vector3[] terrainFaceDirections = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back };

        for (int iter = 0; iter < 6; ++iter)
        {
            if (_MeshFilters[iter] == null)
            {
                GameObject meshObj = new GameObject("mesh");
                meshObj.transform.parent = this.transform;

                meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard"));
                _MeshFilters[iter]            = meshObj.AddComponent <MeshFilter>();
                _MeshFilters[iter].sharedMesh = new Mesh();
            }

            _TerrainFaces[iter] = new TerrainFace(_ShapeGenerator, _MeshFilters[iter].sharedMesh, _TerrainFaceResolution, terrainFaceDirections[iter]);
        }
    }
Exemple #2
0
    void Initialize()
    {
        shapeGenerator = new PlanetShapeGenerator(shapeSettings);
        if (meshFilters == null || meshFilters.Length == 0)
        {
            meshFilters = new MeshFilter[6];
        }
        planetFaces = new PlanetFace[6];

        Vector3[] directions = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back };

        for (int i = 0; i < 6; ++i)
        {
            if (meshFilters[i] == null)
            {
                GameObject meshObj = new GameObject("mesh");
                meshObj.transform.parent   = transform;
                meshObj.transform.position = transform.position;

                meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard"));
                meshFilters[i]            = meshObj.AddComponent <MeshFilter>();
                meshFilters[i].sharedMesh = new Mesh();
            }
            planetFaces[i] = new PlanetFace(shapeGenerator, meshFilters[i].sharedMesh, resolution, directions[i]);
        }
    }
Exemple #3
0
    // Initialize... initialize the planet
    void Initialize()
    {
        // declare the shape gene
        shapeGenerator = new PlanetShapeGenerator(shapeSettings);
        // declare 6 mesh faces
        if (meshFilters == null || meshFilters.Length == 0)
        {
            meshFilters = new MeshFilter[6];
        }
        planetFaces = new PlanetFaceMesh[6];

        // Create LocalUp
        Vector3[] directions = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back };

        for (int i = 0; i < meshFilters.Length; i++) // i use .Lenght instead of 6 because... we never know
        {
            if (meshFilters[i] == null)
            {
                // Create the GameObj of the face
                GameObject meshObj = new GameObject(string.Concat("face", i.ToString()));
                // link them to parent
                meshObj.transform.parent = transform;

                // create a mesh renderer
                meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard"));
                meshFilters[i]            = meshObj.AddComponent <MeshFilter>();
                meshFilters[i].sharedMesh = new Mesh();
            }
            // Create the Face
            planetFaces[i] = new PlanetFaceMesh(shapeGenerator, meshFilters[i].sharedMesh, resolution, directions[i]);
        }
    }
Exemple #4
0
    public PlanetTerrainFace(Mesh mesh, int resolution, Vector3 localUp, PlanetShapeGenerator shapeGenerator)
    {
        this.mesh           = mesh;
        this.resolution     = resolution;
        this.localUp        = localUp;
        this.shapeGenerator = shapeGenerator;

        xAxis = new Vector3(localUp.y, localUp.z, localUp.x);
        zAxis = Vector3.Cross(localUp, xAxis);
    }
Exemple #5
0
    public TerrainFace(PlanetShapeGenerator shapeGenerator, Mesh mesh, int resolution, Vector3 localUp)
    {
        this.shapeGenerator = shapeGenerator;
        this.mesh           = mesh;
        this.resolution     = resolution;
        this.localUp        = localUp;

        axisA = new Vector3(localUp.y, localUp.z, localUp.x);
        axisB = Vector3.Cross(localUp, axisA);
    }
Exemple #6
0
    public PlanetFace(PlanetShapeGenerator generator, Mesh _mesh, int _resolution, Vector3 _localUp)
    {
        shapeGenerator = generator;

        mesh       = _mesh;
        resolution = _resolution;
        normal     = _localUp.normalized;

        tangent   = new Vector3(normal.y, normal.z, normal.x).normalized;
        bitangent = Vector3.Cross(normal, tangent).normalized;
    }
    public TerrainFace(PlanetShapeGenerator shapeGenerator, Mesh mesh, int resolution, Vector3 localUp)
    {
        _ShapeGenerator = shapeGenerator;

        this._Mesh       = mesh;
        this._Resolution = resolution;

        _Sight   = new Vector3(localUp.y, localUp.z, localUp.x);
        _Horizon = Vector3.Cross(localUp, _Sight);
        _Banking = localUp;
    }
Exemple #8
0
    void Initialize()
    {
        if (mMeshFiliters == null)
        {
            mMeshFiliters = new MeshFilter[6];
        }

        if (mTerrainface == null)
        {
            mTerrainface = new TerrainFace[6];
        }

        Vector3[] dirs = new Vector3[]
        {
            Vector3.up, Vector3.down, Vector3.right,
            Vector3.forward, Vector3.back, Vector3.left,
        };

        for (int i = 0; i < dirs.Length; ++i)
        {
            if (mMeshFiliters[i] == null)
            {
                GameObject go = new GameObject(dirs[i].ToString());
                go.transform.SetParent(this.transform);
                go.transform.localPosition = Vector3.zero;

                mMeshFiliters[i] = go.AddComponent <MeshFilter>();
                go.AddComponent <MeshRenderer>();
            }

            if (mTerrainface[i] == null)
            {
                mTerrainface[i] = new TerrainFace();
            }

            mTerrainface[i].Resolution = resoultion;
            mTerrainface[i].Up         = dirs[i];

            mMeshFiliters[i].sharedMesh = mTerrainface[i].Mesh;
        }

        if (mShapeGenerator == null)
        {
            mShapeGenerator = new PlanetShapeGenerator();
        }
        mShapeGenerator.Initialize(ShapeSetting);

        if (mColorGenerator == null)
        {
            mColorGenerator = new PlanetColorGenerator();
        }
        mColorGenerator.Initialize(ColorSetting);
    }
Exemple #9
0
    // Constructor
    public PlanetFaceMesh(PlanetShapeGenerator shapeGenerator, Mesh mesh, int resolution, Vector3 localUp)
    {
        // Set params
        this.shapeGenerator = shapeGenerator;
        this.mesh           = mesh;
        this.resolution     = resolution;
        this.localUp        = localUp;

        // deduce axisA and B
        axisA = new Vector3(localUp.y, localUp.z, localUp.x);
        axisB = Vector3.Cross(localUp, axisA); // Cross is a fonc that search perp vector so the perp Vector of Up and A is B
    }
Exemple #10
0
    public void Construct(PlanetShapeGenerator shapeGenerator, PlanetColorGenerator colorGenerator)
    {
        List <Vector3> vertices = new List <Vector3>(mResolution * mResolution);
        List <Vector2> uvs      = new List <Vector2>(mResolution * mResolution);
        List <int>     indices  = new List <int>(mResolution * mResolution * 6);

        Vector3 right   = new Vector3(mUp.y, mUp.z, mUp.x);
        Vector3 forward = Vector3.Cross(right, mUp);

        for (int y = 0; y < mResolution; ++y)
        {
            for (int x = 0; x < mResolution; ++x)
            {
                Vector2 percent       = new Vector2((float)x / (mResolution - 1), (float)y / (mResolution - 1));
                Vector3 pointOnCube   = mUp + (percent.y - 0.5f) * 2f * forward + (percent.x - 0.5f) * 2f * right;
                Vector3 pointOnCircle = pointOnCube.normalized;

                float unscaledElevation = shapeGenerator.CalculateUnscaledElevation(pointOnCircle);
                vertices.Add(pointOnCircle * shapeGenerator.GetScaledElevation(unscaledElevation));
                uvs.Add(new Vector2(colorGenerator.CalculateBiomeOnPlanet(pointOnCircle), unscaledElevation));
            }
        }

        for (int y = 0; y < mResolution - 1; ++y)
        {
            for (int x = 0; x < mResolution - 1; ++x)
            {
                int index = x + y * (mResolution);

                indices.Add(index);
                indices.Add(index + mResolution);
                indices.Add(index + 1);

                indices.Add(index + mResolution + 1);
                indices.Add(index + 1);
                indices.Add(index + mResolution);
            }
        }

        mMesh.Clear();
        mMesh.SetVertices(vertices);
        mMesh.SetUVs(0, uvs);
        mMesh.SetTriangles(indices, 0);
        mMesh.RecalculateNormals();
        mMesh.RecalculateTangents();
        mMesh.UploadMeshData(false);

        colorGenerator.SetMinMaxValue(shapeGenerator.VecMinMax);
    }
Exemple #11
0
    void Initialize()
    {
        if (!this.gameObject.GetComponent(typeof(Rigidbody)))
        {
            this.gameObject.AddComponent <Rigidbody>().mass = 1;
        }
        if (shapeSettings == null)
        {
            Debug.Log("nullshapesettings...");
        }
        shapeGenerator = new PlanetShapeGenerator(shapeSettings);

        if (meshFilters == null || meshFilters.Length == 0)
        {
            meshFilters = new MeshFilter[6];
        }
        terrainFaces = new TerrainFace[6];

        Vector3[] directions = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back };

        for (int i = 0; i < 6; i++)
        {
            if (meshFilters[i] == null)
            {
                GameObject meshObj = new GameObject("mesh");
                meshObj.transform.parent = transform;

                meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard"));
                meshObj.AddComponent <MeshCollider>().convex         = true;
                MeshCollider meshCollider = meshObj.GetComponent(typeof(MeshCollider)) as  MeshCollider;

                meshFilters[i]            = meshObj.AddComponent <MeshFilter>();
                meshFilters[i].sharedMesh = new Mesh();

                meshCollider.sharedMesh = meshFilters[i].mesh;
                meshCollider.material   = shapeSettings.material;
            }

            terrainFaces[i] = new TerrainFace(shapeGenerator, meshFilters[i].sharedMesh, resolution, directions[i]);
        }
    }