Jump to content

[SOLVED][1.10.2] Wavefront model texture issues (Modular Powersuits)


Recommended Posts

Posted (edited)

I have some wavefront armor models that I'm having texture issues with. If I load and bake them manually, the texture displayed looks like it's the entire texture sheet instead of the model textures. For testing purposes, I created some dummy items and blockstate files for them, and going that route the models load fine and render fine. Any hints as to where to look to fix this would be appreciated. 

 

Models are all here: https://github.com/MachineMuse/MachineMusePowersuits/tree/1.10.2-Java/src/main/resources/assets/powersuits/models/item/armor

The working JSON files that I used to load with dummy items are here: https://github.com/MachineMuse/MachineMusePowersuits/tree/1.10.2-Java/src/main/resources/assets/powersuits/blockstates

Rendering is done through quads, starting here: https://github.com/MachineMuse/MachineMusePowersuits/blob/1.10.2-Java/src/main/java/net/machinemuse/powersuits/client/render/modelspec/RenderPart.java

and ending here: https://github.com/MachineMuse/MachineMusePowersuits/blob/1.10.2-Java/src/main/java/net/machinemuse/powersuits/client/render/modelspec/ModelPartSpec.java#L47-L63

And yes, the rest of the mod is still a bit of mess that I'm cleaning up. 

 

2017-03-06_11.42.48.png

2017-03-06_12.03.38.png

Edited by lehjr
  • 4 weeks later...
Posted

So after digging into the model loading system it looks like the model loading is a different process than what it appears on the surface. When using JSON files to load models, textures are registered automatically in that process, but not if you load the textures yourself. There's also the OBJLoader's internal cache, which means that loading the OBJModel before the texture is registered will result in storing a broken copy of the model. This means that you won't be able to get the textures by OBJModel#getTextures() in order to register them. Of course you could just use your own loader and add a section that loads without the cache so you can use OBJModel#getTextures() to get the textures and register them. Then later on load again with the cache. 

 

So if your texture looks like this when you load the OBJ model, your mapping is lost: 

TextureAtlasSprite{name='powersuits:items/armor/diffuse', frameCount=0, rotated=false, x=0, y=0, height=0, width=0, u0=0.0, u1=0.0, v0=0.0, v1=0.0}

If it looks like this then it should work:

TextureAtlasSprite{name='powersuits:items/armor/diffuse', frameCount=1, rotated=false, x=1024, y=512, height=512, width=512, u0=0.25, u1=0.375, v0=0.25, v1=0.5}

 

  • 4 years later...
  • Guest locked this topic
Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.