Posted February 10, 20187 yr I've have been adding models to my mod and using TESR to do it as my model has more than 1 model to render. I was using McJty's tutorial (https://wiki.mcjty.eu/modding/index.php?title=Render_Block_TESR_/_OBJ-1.12) for the matter and there is a portion of the code that confuses me and I was wondering if someone could clear this up for me. Take this block of code for example: @Override public void render(PedestalTileEntity te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { GlStateManager.pushAttrib(); GlStateManager.pushMatrix(); // Translate to the location of our tile entity GlStateManager.translate(x, y, z); GlStateManager.disableRescaleNormal(); // Render the rotating handles renderHandles(te); // Render our item renderItem(te); GlStateManager.popMatrix(); GlStateManager.popAttrib(); } I understand everything about this, pushing the matrix stack and popping it at the end. As well as translating to the position of the TE. However in the render function: private void renderHandles(PedestalTileEntity te) { GlStateManager.pushMatrix(); GlStateManager.translate(.5, 0, .5); long angle = (System.currentTimeMillis() / 10) % 360; GlStateManager.rotate(angle, 0, 1, 0); RenderHelper.disableStandardItemLighting(); this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); if (Minecraft.isAmbientOcclusionEnabled()) { GlStateManager.shadeModel(GL11.GL_SMOOTH); } else { GlStateManager.shadeModel(GL11.GL_FLAT); } World world = te.getWorld(); // Translate back to local view coordinates so that we can do the acual rendering here GlStateManager.translate(-te.getPos().getX(), -te.getPos().getY(), -te.getPos().getZ()); Tessellator tessellator = Tessellator.getInstance(); BufferBuilder bufferBuilder = tessellator.getBuffer(); bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); IBlockState state = ModBlocks.pedestalBlock.getDefaultState().withProperty(PedestalBlock.IS_HANDLES, true); BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); IBakedModel model = dispatcher.getModelForState(state); dispatcher.getBlockModelRenderer().renderModel(world, model, state, te.getPos(), bufferBuilder, true); tessellator.draw(); RenderHelper.enableStandardItemLighting(); GlStateManager.popMatrix(); } The line prefaced with the comment about translating back to local view coordinates confuses me. If we already translated to the position of the TE, shouldn't it be rendering at the location of the TE. Why is this line of code needed? What does he mean by 'local view coordinates'? I have removed it in my code and it causes the TE to render at the incorrect position, but with it it's fine. I am pretty new to working with rendering (OpenGl, Tessellator, etc.) so if someone could enlighten me about this I would greatly appreciate it. Edited February 10, 20187 yr by WaffleMan0310
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.