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))); }
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))); }
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))); }
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))); }
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))); }
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()); }