Posted June 2, 20205 yr Hello. I've now implemented a custom tool crafting system (similar to Tinker's construct) with Modifiers etc. Now I have to generate a texture out of the materials the tool is made of. How can I do that? Thanks for any help.
June 2, 20205 yr Howdy Look at the Map and the DynamicTexture class. You could also @Jayzx535 for help, he has done some work with dynamic textures recently -TGG
June 2, 20205 yr Author The map uses a custom render class. How can I attach a custom render class to an item?
June 2, 20205 yr Howdy Item.setISTER lets you use a TileEntityRenderer for rendering your item. You can take the rendering functionality from the map rendering class(es) and copy them into your own renderer. Or you can add a custom model and do the same thing, i.e. copy the rendering functionality from the map rendering class(es) (see eg mbe15 in https://github.com/TheGreyGhost/MinecraftByExample) The basic idea is: 1) generate a custom dynamic texture 2) bind the texture 3) draw one or more quads -TGG
June 2, 20205 yr Author @TheGreyGhost Thanks for replying, but I can't find a static or non-static method in Item.java called "setISTER". Edited June 2, 20205 yr by Budschie
June 2, 20205 yr Howdy Ah, my bad. It's actually in Item.Properties nested class Item.java: It's in the nested class Properties public Item.Properties setISTER(java.util.function.Supplier<java.util.concurrent.Callable<net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer>> ister) { this.ister = ister; return this; } --> is Right at the very end of the class -TGG
June 2, 20205 yr Author I'm now attaching my custom item renderer to the item like this: new CommonTool(new Item.Properties().setISTER(() -> new Callable<ItemStackTileEntityRenderer>() { DynamicCommonToolRendering r = null; @Override public ItemStackTileEntityRenderer call() throws Exception { if(r == null) r = new DynamicCommonToolRendering(); return r; } })); But it won't run the render method which is defined in DynamicCommonToolRendering(). What have I done wrong?
June 3, 20205 yr Howdy There could be lots of possible reasons for that. Probably your item model doesn't have "builtin/entity" as the parent type. (see the "Item" section of https://minecraft.gamepedia.com/Model) If that doesn't work, I'd suggest trying some breakpoints in strategic locations, eg: - inside your lambda for supplying the ItemStackTileEntityRenderer - inside the render method of vanilla ItemStackTileEntityRenderer - inside ItemRenderer::renderItem(ItemStack itemStackIn ....) -TGG
June 3, 20205 yr Author @TheGreyGhost Thanks. It works now. But I have a new problem: I am doing something wrong while loading the images of the tool parts: I'm currently using DynamicTexture tex = new DynamicTexture(NativeImage.read(this.getClass().getResourceAsStream("assets/deepnether/textures/item/toolparts/" + stick.getImage(Part.STICK, toolType) + ".png"))); to load a texture, but the stream seems to be "null".
June 3, 20205 yr Author Ok, I now fixed the issue I mentioned in the post above, but now I have the problem that the whole texture atlas is used as a texture for my item...
June 4, 20205 yr Author I now fixed the issue that I mentioned above as well, but now I have another problem: The item doesn't look like a standard minecraft item (it's just a plane with a texture), and doesn't seem to be translated the right way when you hold it in your hands.
June 4, 20205 yr Author Is there any way to create an 3-dimensional model from a dynamic texture? Edited June 4, 20205 yr by Budschie *dynamic*
June 4, 20205 yr 4 minutes ago, Budschie said: Is there any way to create an 3-dimensional model from a texture? Yes, that's how generated item models work. Edited June 4, 20205 yr by Draco18s Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
June 4, 20205 yr Author But how can I generate an item mesh from a dynamic texture? Is there any way to do it with vanilla code, or do I have to do it with my own code? Edited June 4, 20205 yr by Budschie
June 5, 20205 yr Author Well, I think I have to generate the custom item mesh myself. There is one question left I have: Are minecraft block faces triangles or quads?
June 5, 20205 yr Author I still have no solution, please help. I've tried to generate a model out of the texture, but I have no idea in which direction the normals should face etc. Spoiler public void build(DynamicTexture texture, IVertexBuilder builder, float size, int combinedLightIn, Matrix4f matrix) { for(int y = 0; y < texture.getTextureData().getHeight(); y++) { int fromX = -1; int toX = -1; for(int x = 0; x < texture.getTextureData().getWidth(); x++) { if(x == (texture.getTextureData().getWidth()-1)) { if(fromX != -1) { float uAdd = 1f / texture.getTextureData().getWidth(); float vAdd = 1f / texture.getTextureData().getHeight(); beginAndEnd(matrix, fromX, toX, y, builder, size, uAdd * x, vAdd * y, uAdd, vAdd, combinedLightIn); fromX = -1; toX = -1; } } else if(NativeImage.getAlpha(texture.getTextureData().getPixelRGBA(x, y)) > 100) { if(fromX == -1) { fromX = x; } else { toX = x; } } else { if(fromX != -1) { float uAdd = 1f / texture.getTextureData().getWidth(); float vAdd = 1f / texture.getTextureData().getHeight(); beginAndEnd(matrix, fromX, toX, y, builder, size, uAdd * x, vAdd * y, uAdd, vAdd, combinedLightIn); fromX = -1; toX = -1; } } } } } public void beginAndEnd(Matrix4f matrix, int fromX, int toX, int y, IVertexBuilder builder, float size, float uStart, float vStart, float uAdd, float vAdd, int combinedLightIn) { float minX = fromX * size; float minY = 0; float minZ = y * size; float maxX = toX * size; float maxY = size; float maxZ = y * size + size; /* builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); */ //Left right Vector3f n1 = Vector3f.XN; builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); Vector3f n2 = Vector3f.YN; builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); //Up down Vector3f n3 = Vector3f.XP; builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); Vector3f n4 = Vector3f.XN; builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); //Other left right Vector3f n5 = Vector3f.XN; builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); Vector3f n6 = Vector3f.ZP; builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); /* builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + vAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + vAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + vAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); */ /* builder.pos(matrix, fromX * size, 0, y * size).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, toX * size, 0, y * size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, 0, y * size + size).color(255, 255, 255, 255).tex(uStart, vStart + vAdd).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, toX * size, 0, y * size + size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart + vAdd).lightmap(combinedLightIn).endVertex(); WorldRenderer.drawBoundingBox(bufferIn, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); builder.pos(matrix, fromX * size, size, y * size).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, toX * size, size, y * size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, size, y * size + size).color(255, 255, 255, 255).tex(uStart, vStart + vAdd).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, toX * size, size, y * size + size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart + vAdd).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, 0, y * size).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, toX * size, 0, y * size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, size, y * size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, toX * size, size, y * size).color(255, 255, 255, 255).tex(uStart + uAdd, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, 0, y * size + size).color(255, 255, 255, 255).tex(uStart, vStart + vAdd).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, 0, y * size).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, size, y * size).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, fromX * size, size, y * size + size).color(255, 255, 255, 255).tex(uStart, vStart + vAdd).lightmap(combinedLightIn).endVertex(); */ } Edited June 5, 20205 yr by Budschie
June 6, 20205 yr Howdy You have a couple of options; if you just want to generate a flat "pizza box" model with your texture, you can use any of the methods in these example classes https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe04_block_dynamic_block_models/AltimeterBakedModel.java https://github.com/TheGreyGhost/MinecraftByExample/blob/master/src/main/java/minecraftbyexample/mbe21_tileentityrenderer/RenderQuads.java or BlockModel::bakeVanilla If you want to generate an item model with 'holes' in it, similar to vanillla, then look at ItemModelGenerator to see how vanilla does it or ItemLayerModel forge extension for further clues. Haven't done that myself.... -TGG
June 6, 20205 yr Author @TheGreyGhost Thanks for responding. I made this bit of code, but the face normals of the generated model are wrong, resulting in rendering issues: Spoiler public void build(DynamicTexture texture, IVertexBuilder builder, float size, int combinedLightIn, Matrix4f matrix) { for(int y = 0; y < texture.getTextureData().getHeight(); y++) { int fromX = -1; int toX = -1; for(int x = 0; x < texture.getTextureData().getWidth(); x++) { if(x == (texture.getTextureData().getWidth()-1)) { if(fromX != -1) { float uAdd = 1f / texture.getTextureData().getWidth(); float vAdd = 1f / texture.getTextureData().getHeight(); beginAndEnd(matrix, fromX, toX, y, builder, size, uAdd * x, vAdd * y, uAdd, vAdd, combinedLightIn); fromX = -1; toX = -1; } } else if(NativeImage.getAlpha(texture.getTextureData().getPixelRGBA(x, y)) > 100) { if(fromX == -1) { fromX = x; } else { toX = x; } } else { if(fromX != -1) { float uAdd = 1f / texture.getTextureData().getWidth(); float vAdd = 1f / texture.getTextureData().getHeight(); beginAndEnd(matrix, fromX, toX, y, builder, size, uAdd * x, vAdd * y, uAdd, vAdd, combinedLightIn); fromX = -1; toX = -1; } } } } } public void beginAndEnd(Matrix4f matrix, int fromX, int toX, int y, IVertexBuilder builder, float size, float uStart, float vStart, float uAdd, float vAdd, int combinedLightIn) { float minX = fromX * size; float minY = 0; float minZ = y * size; float maxX = toX * size; float maxY = size; float maxZ = y * size + size; /* builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).lightmap(combinedLightIn).endVertex(); */ //Left right Vector3f n1 = Vector3f.XN; builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n1.getX(), n1.getY(), n1.getZ()).endVertex(); Vector3f n2 = Vector3f.XP; builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n2.getX(), n2.getY(), n2.getZ()).endVertex(); //Up down Vector3f n3 = Vector3f.YP; builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n3.getX(), n3.getY(), n3.getZ()).endVertex(); Vector3f n4 = Vector3f.YN; builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n4.getX(), n4.getY(), n4.getZ()).endVertex(); //Other left right Vector3f n5 = Vector3f.ZN; builder.pos(matrix, minX, minY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); builder.pos(matrix, minX, maxY, minZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); builder.pos(matrix, maxX, minY, minZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n5.getX(), n5.getY(), n5.getZ()).endVertex(); Vector3f n6 = Vector3f.ZP; builder.pos(matrix, minX, minY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); builder.pos(matrix, minX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart, vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); builder.pos(matrix, maxX, maxY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); builder.pos(matrix, maxX, minY, maxZ).color(255, 255, 255, 255).tex(uStart + uAdd * (maxX - minX), vStart).overlay(OverlayTexture.NO_OVERLAY).lightmap(combinedLightIn).normal(n6.getX(), n6.getY(), n6.getZ()).endVertex(); } How can I fix that? Edited June 6, 20205 yr by Budschie
June 10, 20205 yr Howdy If your face normals are wrong, fix them? It should be pretty obvious how, based on the code that you posted? -TGG
June 10, 20205 yr Author @TheGreyGhost The problem is, that I have no idea what is going on. From one side, you can see a line, and from the other side of the face, you can see the tool. Everything is clipping, etc., as you can see in this thread:
June 11, 20205 yr Ah ok, now I understand what you mean. That's nothing to do with the vertex normals information, it's because of back face culling. Each quad has a direction - a front face and a back face. Usually, the back face is not drawn. The direction that the face is pointing is determined by the order of the vertices. If you are looking at the front of the face, the four vertices should be in anti-clockwise order. So if the face is pointing the wrong way, you just need to reverse the order of your vertices. For example: your left-right draws in the order of maxY, minZ maxY, maxZ minY, maxZ minY, minZ which is clockwise https://3.bp.blogspot.com/-Lh9ked7q9Lg/UejFhn9OfbI/AAAAAAAAAAY/oYem6d_fSk8/s1600/MinecraftCoordinateSystem.png Instead, add the vertices in the opposite order, i.e. minY, minZ minY, maxZ maxY, maxZ maxY, minZ -TGG
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.