public Edge(Vertex v1, Vertex v2)
        {
            if (v1 == null || v2 == null)
                throw new ArgumentNullException("One of the 2 vertices for this edge is null.");
            else if(v1 == v2)
                throw new Exception("The edge cannot exist from the same vertices.");

            // Let the vertices know that they're being used in this edge.
            v1.Edges.AddLast(this);
            v2.Edges.AddLast(this);

            _vertex1 = v1;
            _vertex2 = v2;
        }
        /// <summary>
        /// Fills Face[] using the available Vec3Vertices and Indices.
        /// </summary>
        public void CreateFaces()
        {
            var n = 3;
            var faces = new List<Face>();
            _idxForVertex = new Dictionary<uint, Vertex>();
            _vertices = new Vertex[_vec3Vertices.Length];

            #region getVertex(...) function
            Func<ushort, Vertex> getVertex = idx =>
            {
                if (_idxForVertex.ContainsKey(idx))
                {
                    return _idxForVertex[idx];
                }
                else
                {
                    var vert = new Vertex(idx,
                        _vec3Vertices[idx],
                        _normals == null ?
                        new vec3()
                        : _normals[idx]);
                    _idxForVertex[idx] = vert;

                    _vertices[idx] = vert;
                    return vert;
                }
            };
            #endregion getVertex(...) function

            for (int i = 0; i < _indices.Length; i += n)
            {
                var idx0 = _indices[i];
                var idx1 = _indices[i + 1];
                var idx2 = _indices[i + 2];

                Vertex v0 = getVertex(idx0);
                Vertex v1 = getVertex(idx1);
                Vertex v2 = getVertex(idx2);

                //faces.Add(new Face(new Vertex[] { v0, v1, v2 }));

            }

            _faces = faces.ToArray();
        }