Example #1
0
        public static G3DBuilder AddUnityUV(this G3DBuilder gb, Vector2[] vectors, int index)
        {
            if (vectors?.Length == 0)
            {
                return(gb);
            }

            var data      = vectors.Select(v => new Math3d.Vector2(v.x, v.y)).ToIArray();
            var attrDescr = AttributeDescriptor.Parse(CommonAttributes.VertexUv).SetIndex(index);

            return(gb.Add(new GeometryAttribute <Math3d.Vector2>(data, attrDescr)));
        }
Example #2
0
        public static G3DBuilder AddUnityTangent(this G3DBuilder gb, Vector4[] tangents)
        {
            if (tangents?.Length == 0)
            {
                return(gb);
            }

            var data      = tangents.Select(v => new Math3d.Vector4(v.x, v.y, v.z, v.w)).ToIArray();
            var attrDescr = AttributeDescriptor.Parse(CommonAttributes.VertexTangent);

            return(gb.Add(new GeometryAttribute <Math3d.Vector4>(data, attrDescr)));
        }
Example #3
0
        public static G3DBuilder AddUnityNormals(this G3DBuilder gb, Vector3[] normals)
        {
            if (normals?.Length == 0)
            {
                return(gb);
            }

            var data      = normals.Select(v => new Math3d.Vector3(v.x, v.y, v.z)).ToIArray();
            var attrDescr = AttributeDescriptor.Parse(CommonAttributes.VertexNormal);

            return(gb.Add(new GeometryAttribute <Math3d.Vector3>(data, attrDescr)));
        }
Example #4
0
        public static G3DBuilder AddUnityColors(this G3DBuilder gb, Color[] colors)
        {
            if (colors?.Length == 0)
            {
                return(gb);
            }

            var data      = colors.Select(c => new Math3d.Vector4(c.r, c.g, c.b, c.a)).ToIArray();
            var attrDescr = AttributeDescriptor.Parse(CommonAttributes.VertexColor);

            return(gb.Add(new GeometryAttribute <Math3d.Vector4>(data, attrDescr)));
        }
Example #5
0
        public static G3DBuilder AddUnityVertices(this G3DBuilder gb, Vector3[] vectors)
        {
            if (vectors?.Length == 0)
            {
                return(gb);
            }

            var data      = vectors.Select(v => new Math3d.Vector3(v.x, v.y, v.z)).ToIArray();
            var attrDescr = AttributeDescriptor.Parse(CommonAttributes.Position);

            return(gb.Add(new GeometryAttribute <Math3d.Vector3>(data, attrDescr)));
        }
Example #6
0
        public static G3D ToG3D(this Mesh mesh)
        {
            var g = new G3DBuilder();

            // NOTE: if the any of the UV channels are null, followed by a non-null channel, then the UV channels will get reindexed
            // during reimport of the G3D. This would be quite rare.
            var uvIndex = 0;

            g.AddUnityUV(mesh.uv, uvIndex++);
            g.AddUnityUV(mesh.uv2, uvIndex++);
            g.AddUnityUV(mesh.uv3, uvIndex++);
            g.AddUnityUV(mesh.uv4, uvIndex++);
            g.AddUnityUV(mesh.uv5, uvIndex++);
            g.AddUnityUV(mesh.uv6, uvIndex++);
            g.AddUnityUV(mesh.uv7, uvIndex++);
            g.AddUnityUV(mesh.uv8, uvIndex++);

            g.AddUnityVertices(mesh.vertices);
            g.AddUnityNormals(mesh.normals);
            g.AddUnityTangent(mesh.tangents);
            g.AddUnityColors(mesh.colors);

            var indices = new List <int>();
            var offsets = new List <int>();
            var offset  = 0;

            for (var i = 0; i < mesh.subMeshCount; ++i)
            {
                offsets.Add(offset);
                var subIndices = mesh.GetIndices(i);
                indices.AddRange(subIndices);
                offset += subIndices.Length;
            }

            g.AddIndices(indices.ToArray());

            return(g.ToG3D());
        }