Ejemplo n.º 1
0
        private float[] FindVertices(GeometryShader shader)
        {
            List <float> verts = new List <float>();
            FindSolidFacesDelegate <UInt16> solidCheck = (x =>
            {
                var comp = BlockManager.Get(x).GetComponant <VisibilityBComponant>();
                if (comp != null)
                {
                    return(comp.SolidFaces);
                }
                return(Face.None);
            });

            foreach (Octree <UInt16> octree in Chunk.Octrees)
            {
                var iter = (OctreeEnumerator <UInt16>)octree.GetEnumerator();
                while (iter.MoveNext())
                {
                    OctreeLeaf <UInt16> leaf = iter.Current;

                    BlockType type = BlockManager.Get(leaf.Value);
                    var       vis  = type.GetComponant <VisibilityBComponant>();

                    if (vis == null || !vis.IsVisible)
                    {
                        continue;
                    }

                    var mdl = type.GetComponant <ModelBComponant>();

                    if (mdl == null)
                    {
                        continue;
                    }

                    int size = iter.Size;

                    Vector3 offset = new Vector3(iter.X, iter.Y, iter.Z);

                    verts.AddRange(mdl.Model.GenerateVertexData(offset, size,
                                                                leaf.FindExposedFaces(solidCheck)));
                }
            }

            return(verts.ToArray());
        }
Ejemplo n.º 2
0
 public void UpdateVertices(GeometryShader shader)
 {
     Monitor.Enter(this);
     myVertices = FindVertices(shader);
     Monitor.Exit(this);
 }