Exemple #1
0
    void FragmentDataThread(TerrainFragment fragment, Action <FragmentMeshData> callback)
    {
        FragmentMeshData data = fragment.BuildMeshData();

        lock (fragmentTaskCallbacksQueue)
        {
            ThreadTaskCallback <FragmentMeshData> task = new ThreadTaskCallback <FragmentMeshData>(callback, data);
            fragmentTaskCallbacksQueue.Enqueue(task);
        }
    }
    public void BuildMesh()
    {
        mesh = new Mesh();
        FragmentMeshData test = BuildMeshData();

        mesh.Clear();
        mesh.vertices  = test.vertices;
        mesh.triangles = test.triangles;
        mesh.RecalculateNormals();
    }
    public void RecalculateNormalsDown(FragmentMeshData b)
    {
        for (int i = 0; i < downIndexes.Length; i++)
        {
            int index  = downIndexes[i];
            int tIndex = b.upIndexes[i];

            Vector3 aNormal = normals[index];
            Vector3 bNormal = b.normals[tIndex];

            Vector3 normal = aNormal + bNormal;
            normal.Normalize();
            normals[index]    = normal;
            b.normals[tIndex] = normal;
        }
    }
Exemple #4
0
    private void OnFragmentDataRecived(FragmentMeshData fragmentMeshData)
    {
        //tell neigbords to recalculate normals
        GameObject fragmentObj = fragmentObjPool.Acquire();

        fragmentObj.name = "Fragment lod " + fragmentMeshData.lodInfos.lodLevel + " center " + fragmentMeshData.lodInfos.center;

        Mesh       mesh       = fragmentObjPool.meshPool.Acquire();
        MeshFilter meshFilter = fragmentObj.GetComponent <MeshFilter>();

        meshFilter.sharedMesh = mesh;


        TerrainFragment terrainFragment;

        visibleFragments.TryGetValue(fragmentMeshData.lodInfos.coords, out terrainFragment);
        UpdateNeighborsNormals(fragmentMeshData.lodInfos.coords, terrainFragment); //need a better check if lod exists

        mesh.vertices  = fragmentMeshData.vertices;
        mesh.triangles = fragmentMeshData.triangles;
        mesh.normals   = fragmentMeshData.normals;

        terrainFragment.gameObject = fragmentObj;
    }
 public void RecalculateNormalUpLeft(FragmentMeshData t)
 {
 }
 public void RecalculateNormalDownRight(FragmentMeshData t)
 {
 }