Ver código fonte

Fix blender v2.79 collada exports loading

blender exporter now (since v2.79) exports meshes as <Triangles> when all contained polygons are tris
https://developer.blender.org/rBc9b95c28f64e9d7421b00cbf8ed4ecddd6471ae5

Test: Export `g3nd@master/data% blender blender/scene.blend` with blender version 2.79+

Why `d.decTriangles()` or `newMeshTriangles(m, pet)` wasn't added:
Didn't bother implementing since its exactly the same code as `newMeshPolylist(m, m.PrimitiveElements)` except the `vcount` part.
Julian Langschaedel 7 anos atrás
pai
commit
ca61923779
1 arquivos alterados com 10 adições e 1 exclusões
  1. 10 1
      loader/collada/library_geometries.go

+ 10 - 1
loader/collada/library_geometries.go

@@ -327,7 +327,7 @@ func (d *Decoder) decMesh(start xml.StartElement, geom *Geometry) error {
 			continue
 		}
 		// Decodes polylist
-		if child.Name.Local == "polylist" {
+		if child.Name.Local == "polylist" || child.Name.Local == "triangles" {
 			err = d.decPolylist(child, mesh)
 			if err != nil {
 				return err
@@ -409,6 +409,15 @@ func (d *Decoder) decPolylist(start xml.StartElement, mesh *Mesh) error {
 	pl.Material = findAttrib(start, "material").Value
 	mesh.PrimitiveElements = append(mesh.PrimitiveElements, pl)
 
+	// blender exporter now (since v2.79) exports meshes as <Triangles> when all contained polygons are tris
+	// https://developer.blender.org/rBc9b95c28f64e9d7421b00cbf8ed4ecddd6471ae5
+	if start.Name.Local == "triangles" {
+		pl.Vcount = make([]int, pl.Count)
+		for i := range pl.Vcount {
+			pl.Vcount[i] = 3
+		}
+	}
+
 	for {
 		// Get next child
 		child, data, err := d.decNextChild(start)