-
Notifications
You must be signed in to change notification settings - Fork 309
Open
Description
Hello.
I've had an issue cloning an already loaded obj file. When accessing any values of the cloned node, the program crashes.
// Open OBJ file
decoder, err := obj.Decode(OBJ_FILE, "") // Empty string to auto-detect matlib
if err != nil {
return
}
for _, material := range decoder.Materials {
// Force Kd to be white. Otherwise this model will be black despite texture being loaded successfully
material.Diffuse.R = 1.0
material.Diffuse.G = 1.0
material.Diffuse.B = 1.0
}
// Creates a new node with all the objects in the decoded file and adds it to the scene
group, err := decoder.NewGroup()
if err != nil {
return
}
scene.Add(group)
clone1 := group.Clone().(*core.Node)
clone1.SetPosition(1, 2, 3) // crashes here
scene.Add(clone1)
Trying to analyze the returned value of the cloned function also ran into the same issue.
/// above is same as before...
scene.Add(group)
fmt.Printf("Type of the original is %T\n", group)
clone1 := group.Clone()
fmt.Printf("Type of the clone is %T\n", clone1) // crashes here
clone1Casted := clone1.(*core.Node)
clone1Casted.SetPosition(1, 2, 3)
scene.Add(clone1Casted)
Results in:
Type of the original is *core.Node
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x48 pc=0x4d2f66]
A workaround was to create a custom clone function:
func cloneCustom(original *core.Node) *core.Node {
clone := core.NewNode()
clone.Dispatcher.Initialize()
clone.SetName(original.Name() + " (Clone)")
for _, child := range original.Children() {
clone.Add(child.Clone())
}
return clone
}
G3N Discord discussion:
https://discordapp.com/channels/877904175546122261/877913551853981697/1372632429025689741
Metadata
Metadata
Assignees
Labels
No labels