Budschie Posted June 2, 2020 Posted June 2, 2020 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. Quote
TheGreyGhost Posted June 2, 2020 Posted June 2, 2020 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 Quote
Budschie Posted June 2, 2020 Author Posted June 2, 2020 The map uses a custom render class. How can I attach a custom render class to an item? Quote
TheGreyGhost Posted June 2, 2020 Posted June 2, 2020 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 Quote
Budschie Posted June 2, 2020 Author Posted June 2, 2020 (edited) @TheGreyGhost Thanks for replying, but I can't find a static or non-static method in Item.java called "setISTER". Edited June 2, 2020 by Budschie Quote
TheGreyGhost Posted June 2, 2020 Posted June 2, 2020 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 1 Quote
Budschie Posted June 2, 2020 Author Posted June 2, 2020 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? Quote
TheGreyGhost Posted June 3, 2020 Posted June 3, 2020 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 1 Quote
Budschie Posted June 3, 2020 Author Posted June 3, 2020 @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". Quote
Budschie Posted June 3, 2020 Author Posted June 3, 2020 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... Quote
Budschie Posted June 4, 2020 Author Posted June 4, 2020 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. Quote
Budschie Posted June 4, 2020 Author Posted June 4, 2020 (edited) Is there any way to create an 3-dimensional model from a dynamic texture? Edited June 4, 2020 by Budschie *dynamic* Quote
Draco18s Posted June 4, 2020 Posted June 4, 2020 (edited) 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, 2020 by Draco18s 1 Quote 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.
Budschie Posted June 4, 2020 Author Posted June 4, 2020 (edited) 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, 2020 by Budschie Quote
Budschie Posted June 5, 2020 Author Posted June 5, 2020 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? Quote
Budschie Posted June 5, 2020 Author Posted June 5, 2020 Should I set the vertices directly, or should I use a ModelRenderer? Quote
Budschie Posted June 5, 2020 Author Posted June 5, 2020 (edited) 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, 2020 by Budschie Quote
TheGreyGhost Posted June 6, 2020 Posted June 6, 2020 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 1 Quote
Budschie Posted June 6, 2020 Author Posted June 6, 2020 (edited) @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, 2020 by Budschie Quote
TheGreyGhost Posted June 10, 2020 Posted June 10, 2020 Howdy If your face normals are wrong, fix them? It should be pretty obvious how, based on the code that you posted? -TGG Quote
Budschie Posted June 10, 2020 Author Posted June 10, 2020 @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: Quote
TheGreyGhost Posted June 11, 2020 Posted June 11, 2020 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 1 Quote
Budschie Posted June 11, 2020 Author Posted June 11, 2020 @TheGreyGhost Thank you! This solved my problems. Quote
Recommended Posts
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.