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; } }
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) { }