public bool TryGetVertex(int indeex, out ColorVertex picked) { if (indeex < terrainVertices.Length) { picked = terrainVertices[indeex]; return(true); } picked = new ColorVertex(); return(false); }
private void UpdateTerrain() { if (sim == null || sim.Terrain == null) { return; } WorkPool.QueueUserWorkItem(sync => { int step = 1; for (int x = 0; x < 256; x += step) { for (int y = 0; y < 256; y += step) { float z = 0; int patchNr = ((int)x / 16) * 16 + (int)y / 16; if (sim.Terrain[patchNr] != null && sim.Terrain[patchNr].Data != null) { float[] data = sim.Terrain[patchNr].Data; z = data[(int)x % 16 * 16 + (int)y % 16]; } heightTable[x, y] = z; } } terrainFace = renderer.TerrainMesh(heightTable, 0f, 255f, 0f, 255f); terrainVertices = new ColorVertex[terrainFace.Vertices.Count]; for (int i = 0; i < terrainFace.Vertices.Count; i++) { byte[] part = Utils.IntToBytes(i); terrainVertices[i] = new ColorVertex() { Vertex = terrainFace.Vertices[i], Color = new Color4b() { R = part[0], G = part[1], B = part[2], A = 253 // terrain picking } }; } terrainIndices = new uint[terrainFace.Indices.Count]; for (int i = 0; i < terrainIndices.Length; i++) { terrainIndices[i] = terrainFace.Indices[i]; } terrainInProgress = false; Modified = false; terrainTextureNeedsUpdate = true; terrainTimeSinceUpdate = 0f; }); }