Ejemplo n.º 1
0
 public bool TryGetVertex(int indeex, out ColorVertex picked)
 {
     if (indeex < terrainVertices.Length)
     {
         picked = terrainVertices[indeex];
         return(true);
     }
     picked = new ColorVertex();
     return(false);
 }
Ejemplo n.º 2
0
        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;
            });
        }