Exemple #1
0
        public Geometry Output()
        {
            Geometry geo = new Geometry(_geometry.Vertices.Length);

            var triangles = new List<int>();

            for (int i = 0; i < _geometry.Vertices.Length; i++) {
                geo.Vertices[i] = _geometry.Vertices[i];
                if (i < _geometry.Normals.Length) geo.Normals[i] = _geometry.Normals[i];
                if (i < _geometry.UV.Length) geo.UV[i] = _geometry.UV[i];
            }

            for (int i = 0; i < _geometry.Triangles.Length; i+=3) {
                int t = i / 3;
                if ((!Invert && System.Array.IndexOf(Indexes, t) >=  0) ||
                    ( Invert && System.Array.IndexOf(Indexes, t) == -1))
                    {
                        triangles.Add(_geometry.Triangles[i  ]);
                        triangles.Add(_geometry.Triangles[i+1]);
                        triangles.Add(_geometry.Triangles[i+2]);
                    }
            }
            geo.Triangles = triangles.ToArray();

            if (RecalculateNormals) {
                geo.RecalculateNormals();
            }

            return geo;
        }
Exemple #2
0
        public Geometry Output()
        {
            if (_geometry.Polygons.Length == 0) return Geometry.Empty;

            var polyIndices = _geometry.Polygons.Length;
            var polyCount = polyIndices / 2;
            var segments = _geometry.Polygons[1];
            var vertexCount = segments * polyCount;
            var triCount = segments * (polyCount - 1) * 6;

            var geo = new Geometry(vertexCount, triCount, polyCount);

            int vCount = 0;
            int tCount = 0;

            for (var p = 0; p < polyIndices; p+=2) {
                var start = _geometry.Polygons[p];

                if (_geometry.Polygons[p+1] != segments) {
                    Debug.LogErrorFormat("Bridge error: input polygons have different numbers of vertices\nGot {0}, expected {1}", _geometry.Polygons[p+1], segments);
                    return Geometry.Empty;
                }

                for (var v = start; v < start+segments; v++) {
                    geo.Vertices[vCount] = _geometry.Vertices[v];
                    if (v < _geometry.Normals.Length) geo.Normals[vCount] = _geometry.Normals[v];
                    if (v < _geometry.Tangents.Length) geo.Tangents[vCount] = _geometry.Tangents[v];
                    if (v < _geometry.UV.Length) geo.UV[vCount] = _geometry.UV[v];
                    vCount++;

                    if (p > 0) {
                        geo.Triangles[tCount++] = v;
                        geo.Triangles[tCount++] = v-segments;
                        geo.Triangles[tCount++] = (v-segments+1 == start) ? start-segments : v-segments+1;

                        geo.Triangles[tCount++] = (v-1 < start) ? start+segments-1 : v-1;
                        geo.Triangles[tCount++] = v-segments;
                        geo.Triangles[tCount++] = v;
                    }

                }
            }

            geo.Polygons = _geometry.Polygons;

            if (RecalculateNormals) {
                geo.RecalculateNormals();
            }

            return geo;
        }
Exemple #3
0
        public Geometry Output()
        {
            int vertexCount = _geometry.Vertices.Length;

            Geometry geo = new Geometry(vertexCount+1);

            var triangles = new List<int>();

            // Add the converge point
            geo.Vertices[vertexCount] = Point;
            geo.Normals[vertexCount] = Point;
            geo.UV[vertexCount] = new Vector2(.5f, .5f);

            for (int i = 0; i < vertexCount; i++) {
                geo.Vertices[i] = _geometry.Vertices[i];
                if (!RecalculateNormals && i < _geometry.Normals.Length) {
                    geo.Normals[i] = _geometry.Normals[i];
                }
                geo.UV[i] = new Vector2((i % 2 == 0) ? 0f : 1f, 0f);

                int a = (i == _geometry.Vertices.Length-1) ? 0 : i+1, b = vertexCount, c = i;

                var dot = Vector3.Dot(_geometry.Vertices[a], _geometry.Vertices[c]);
                if (dot == 1f || dot == -1) {
                    continue;
                }

                triangles.Add(a);
                triangles.Add(b);
                triangles.Add(c);
            }

            geo.Triangles = triangles.ToArray();
            geo.Polygons = _geometry.Polygons;

            if (RecalculateNormals) {
                geo.RecalculateNormals();
            }

            return geo;
        }