Jump to content

[1.10.2] Texture not rendering with custom OBJ model


audiomodder

Recommended Posts

So I've been working on a mod and, while I can get textures to bind to json driven blocks, I've got some entities that I've finally (after some work) gotten obj models to work with.  The issue is that the textures refuse to show up.  I don't get any errors on run, and it is calling the getEntityTexture in my renderer....if just won't bind that to the entity model

 

Here's my doRender for the entity:

 

     bakeModel();

      GlStateManager.pushMatrix();
      GlStateManager.translate((float) x, (float) y, (float) z);

      float scale = 0.1F;

      GlStateManager.rotate(90.0F, 0.0F, -1.0F, 0.0F);
      GlStateManager.scale(scale, scale, scale);
      GlStateManager.enableRescaleNormal();

      bindEntityTexture(entity);

      //Actually render this bad boy now
      Tessellator tessellator = Tessellator.getInstance();
      VertexBuffer vertexBuffer = tessellator.getBuffer();
      List<BakedQuad> listQuads = shipBakedModel.getQuads(null, null, 0);
      int k = 0;
      vertexBuffer.begin(7, DefaultVertexFormats.ITEM);
      for (int j = listQuads.size(); k < j; ++k) {
         BakedQuad bakedquad = listQuads.get(k);

         vertexBuffer.addVertexData(bakedquad.getVertexData());

         Vec3i vec3i = bakedquad.getFace().getDirectionVec();
         vertexBuffer.putNormal((float) vec3i.getX(), (float) vec3i.getY(), (float) vec3i.getZ());

      }
      tessellator.draw();

      GlStateManager.disableRescaleNormal();
      GlStateManager.popMatrix();

      super.doRender(entity, x, y, z, entityYaw, partialTicks);

 

What silly thing am I missing?

 

~@udio~

Link to comment
Share on other sites

I don't think you can bind textures to .obj models. With my own .obj models, I've baked the texture (material) to the UV-map of the model inside the rendering program (Blender in my case), meaning all I need is the accompanying .mtl file in the same folder as the .obj.

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Link to comment
Share on other sites

Interesting, when I look into the mtl file, it references the texture, but it doesn't seem to actually be applied at runtime.  I've tried both a true relative path and a minecraft resource path with no avail.

 

Also, if i remove the bindEntityTexture, I get what you would expect....the purple and black.  Add the bindEntityTexture back in, all white (side note:  the texture file is not all white :P ).  This would tell me that it's not finding a texture referenced in the model.  Maybe I'm not baking the model correctly?  Or maybe not applying the texture when I render?  This is my first time having to manually handle the rendering, so I'm shooting in the dark completely.

Link to comment
Share on other sites

Hi

 

Not sure, but some ideas to try:

- is texturing on for the drawing (purple and black implies yes)

- perhaps the texture coordinates on your model quads don't line up with the texture- so (eg) a single texel of your texture is being stretched to cover the entire model - try changing your texture to a different colour?  BakedQuads usually use a texture that has been stitched into a much larger texture sheet, so the BakedQuad u,v values are usually very close to each other, whereas your entity texture probably uses the entire uv space 0 -> 1.

BakedQuadRetextured might be worth checking out.  You could also inspect the BakedQuads to make sure the texture coordinates look right.

 

-TGG

Link to comment
Share on other sites

Still no luck, but I have noticed something interesting.  Following the export of the obj (and related files) from Blender, I was curious and decided to try to do an OBJ import of the exported files.  Upon doing so, I discovered that the texture wasn't being applied there, either.  So at this point I'm fairly certain it's a model issue, not a code issue.

 

As a side note, I'm not doing the models for our code (I'm a meat-headed coder, not an artist).  Our artist uses Cubik, and the default obj that Cubik exported contained "s off" entries, which aren't supported I guess?  It makes sense that OBJ loader wouldn't use these, but the fact that Cubik would export something that Forge couldn't use is, well, frustrating.  Maybe it would be different if we were doing a tile entity and could use the TESR, but it would appear that Cubik isn't really good for anything that couldn't use a json if it needed to.

Link to comment
Share on other sites

Still no luck, but I have noticed something interesting.  Following the export of the obj (and related files) from Blender, I was curious and decided to try to do an OBJ import of the exported files.  Upon doing so, I discovered that the texture wasn't being applied there, either.  So at this point I'm fairly certain it's a model issue, not a code issue.

 

As a side note, I'm not doing the models for our code (I'm a meat-headed coder, not an artist).  Our artist uses Cubik, and the default obj that Cubik exported contained "s off" entries, which aren't supported I guess?  It makes sense that OBJ loader wouldn't use these, but the fact that Cubik would export something that Forge couldn't use is, well, frustrating.  Maybe it would be different if we were doing a tile entity and could use the TESR, but it would appear that Cubik isn't really good for anything that couldn't use a json if it needed to.

Just to be sure, as you do imply that you do not use Blender much at all, but are you sure you had Blender in the correct viewport?

When importing about anything into blender, the default viewport is "solid", where you need either "texture", "material" or "rendered" to view it with "textures".

[spoiler=image]

lYkNhMY.png

 

 

On the Cubik issues. Yes, that is quite odd >_>

As i mentioned before, I would recommend you get the model's texture baked to the UV-map, to make sure that it renders (This should be done inside the modelling software. If Cubik cannot do this, then sorry, it has no business with .obj models at all).

I recommend that you guys use Blender or any other .obj modelling software directly instead of these "minecraft modelling programs" for anything that json files cannot do.

Note: Faces in models (a cube has 6 flat faces aka sides. A 4-sided pyramid got 5 (4 triangles + bottom) etc) can only have 4 or less edges. More are not supported in Forge, and will either cause the model to render without the faces, or not render the model at all (have had both cases happen to me before)

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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