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

Method LoadNode

loader/gltf/loader.go:179–271  ·  view source on GitHub ↗

LoadNode creates and returns a new Node described by the specified index in the decoded GLTF Nodes array.

(nodeIdx int)

Source from the content-addressed store, hash-verified

177// LoadNode creates and returns a new Node described by the specified index
178// in the decoded GLTF Nodes array.
179func (g *GLTF) LoadNode(nodeIdx int) (core.INode, error) {
180
181 // Check if provided node index is valid
182 if nodeIdx < 0 || nodeIdx >= len(g.Nodes) {
183 return nil, fmt.Errorf("invalid node index")
184 }
185 nodeData := g.Nodes[nodeIdx]
186 // Return cached if available
187 if nodeData.cache != nil {
188 log.Debug("Fetching Node %d (cached)", nodeIdx)
189 return nodeData.cache, nil
190 }
191 log.Debug("Loading Node %d", nodeIdx)
192
193 var in core.INode
194 var err error
195 // Check if the node is a Mesh (triangles, lines, etc...)
196 if nodeData.Mesh != nil {
197 in, err = g.LoadMesh(*nodeData.Mesh)
198 if err != nil {
199 return nil, err
200 }
201
202 if nodeData.Skin != nil {
203
204 mesh, ok := in.(*graphic.Mesh)
205 if !ok {
206 children := in.GetNode().Children()
207 if len(children) > 1 {
208 return nil, fmt.Errorf("skinning/rigging meshes with more than a single primitive is not supported")
209 }
210 mesh = children[0].(*graphic.Mesh)
211 }
212
213 // Create RiggedMesh
214 rm := graphic.NewRiggedMesh(mesh)
215 skeleton, err := g.LoadSkin(*nodeData.Skin)
216 if err != nil {
217 return nil, err
218 }
219 rm.SetSkeleton(skeleton)
220 in = rm
221 }
222
223 // Check if the node is Camera
224 } else if nodeData.Camera != nil {
225 in, err = g.LoadCamera(*nodeData.Camera)
226 if err != nil {
227 return nil, err
228 }
229 // Other cases, return empty node
230 } else {
231 log.Debug("Empty Node")
232 in = core.NewNode()
233 }
234
235 // Get *core.Node from core.INode
236 node := in.GetNode()

Callers 3

LoadSceneMethod · 0.95
LoadSkinMethod · 0.95
LoadAnimationMethod · 0.95

Calls 15

LoadMeshMethod · 0.95
GetNodeMethod · 0.95
LoadSkinMethod · 0.95
SetSkeletonMethod · 0.95
LoadCameraMethod · 0.95
NewRiggedMeshFunction · 0.92
NewNodeFunction · 0.92
DebugMethod · 0.80
SetMatrixMethod · 0.80
SetQuaternionMethod · 0.80
SetScaleMethod · 0.80
ChildrenMethod · 0.65

Tested by

no test coverage detected