MCPcopy
hub / github.com/g3n/engine / newNode

Method newNode

loader/collada/scene.go:54–159  ·  view source on GitHub ↗
(cnode *Node)

Source from the content-addressed store, hash-verified

52}
53
54func (d *Decoder) newNode(cnode *Node) (core.INode, error) {
55
56 var node core.INode
57 switch nt := cnode.Instance.(type) {
58 // Empty Node
59 case nil:
60 node = core.NewNode()
61 // Geometry
62 case *InstanceGeometry:
63
64 // Get geometry instance
65 geomi, gtype, err := d.GetGeometry(nt.Url)
66 if err != nil {
67 return nil, err
68 }
69
70 switch gtype {
71 case gls.TRIANGLES:
72 mesh := graphic.NewMesh(geomi, nil)
73 geom := geomi.GetGeometry()
74 // Associates the material in <bind_material> with the geometry group material
75 for _, im := range nt.BindMaterial.TechniqueCommon.InstanceMaterial {
76 matid := strings.TrimPrefix(im.Target, "#")
77 for i := 0; i < geom.GroupCount(); i++ {
78 group := geom.GroupAt(i)
79 if group.Matid == matid {
80 mat, err := d.GetMaterial(im.Target)
81 if err != nil {
82 return nil, err
83 }
84 mesh.AddGroupMaterial(mat, i)
85 break
86 }
87 }
88 }
89 node = mesh
90
91 case gls.POINTS:
92 mat := material.NewPoint(&math32.Color{})
93 mat.SetSize(30)
94 node = graphic.NewPoints(geomi, mat)
95
96 case gls.LINES:
97 mat := material.NewBasic()
98 node = graphic.NewLines(geomi, mat)
99
100 case gls.LINE_STRIP:
101 mat := material.NewBasic()
102 node = graphic.NewLineStrip(geomi, mat)
103
104 default:
105 return nil, fmt.Errorf("primitive not supported")
106 }
107 default:
108 return nil, fmt.Errorf("instance geometry type:%T not supported", nt)
109 }
110
111 n := node.GetNode()

Callers 1

NewSceneMethod · 0.95

Calls 15

GetGeometryMethod · 0.95
GetMaterialMethod · 0.95
AddGroupMaterialMethod · 0.95
GetNodeMethod · 0.95
FromArrayMethod · 0.95
TransposeMethod · 0.95
DecomposeMethod · 0.95
SetFromAxisAngleMethod · 0.95
NewNodeFunction · 0.92
NewMeshFunction · 0.92
NewPointFunction · 0.92
NewPointsFunction · 0.92

Tested by

no test coverage detected