javascript - OBLMTLLoader name of the mesh empty -
i have sort of bug can't explain when use objmtlloader instead of objloader. obj file contains groups load both loaders in different children mesh.
i have in 2 case children of scene three.object3d same number of children: 1837. however, when display object in js console , inspect it:
- for 1 loads objloader first children has got id 12 , id increases of 1 each new mesh , finish id 1848. makes sense.
- with same object loads objmtlloader, id missing, in fact first children has 13 id , last children has id equals 5521. , instance here id of 5 first children : 13 16 19 22 25
this may not problem here tricky par of story, aim of project use raycaster in order change color of selected mesh (by clicking on it). display name of selected mesh:
- with objloader when use raycaster modify color of mesh , display name without problem.
- but objmtlloader change color of selected mesh without trouble, name of mesh nothing (without character).
the funny think every mesh has name imported in 2 cases.
the thing strange when display id of selected mesh in 2 cases objloader can find in object display in js console id in list of mesh , name correspond objmtlloader id in object3d...
is got idea problem can ?
thanks lot in advance !
update :
i have found part of solution still there strange, here example of structure of 3d model when import three.objmtlloader :
three.group [...] children : array[1837] 0 : three.object3d [...] name : "the name of part" children : array[2] 0: three.mesh name : "" children : array[0] [...] 1: three.mesh [...] [...] 1 : three.object3d [...] in fact raycaster compute intersection three.mesh , name store @ level n-1 mesh. why have no name when try display it. why objloader level n-1 not exist same model 3d load ? in fact objloader structure of object :
three.group [...] children : array[1837] 0 : three.mesh [...] name : "the name of part" children : array[0] [...] 1 : three.mesh [...]
basically, when objloader reads .obj file, creates three.object3d , each group of .obj, creates three.mesh , adds object3d, ignoring usemtl in .obj. you'll have 1 three.mesh per groups in .obj correct name, , it's cool.
objmtlloader, however, doesn't ignore usemtl. , since mesh bound geometry , material, if change material, have create mesh. when sees new groups, create object3d correct name, , object3d's children parts different materials.
if want name of real mesh, want intersect.object.parent.name.
Comments
Post a Comment