Posted September 13, 20196 yr Well, it seems that normals doesn't get rotated with the model itself when I use GlStateManager.rotate. I have a JSON model. One part of it is static, and two parts are dynamic. Dynamic parts are rendered using TESR. If the facing of model placed in world is NORTH (default) - everything is rendering as it should, but when model gets rotated, static part is rendered fine and TESR part looks like normals of dynamic parts are still pointing to the NORTH direction. Here are the screenshots: Model facing SOUTH Model facing NORTH TESR rendering part: @Override public void render(CounterTE te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) { GlStateManager.pushAttrib(); GlStateManager.pushMatrix(); GlStateManager.translate(x, y, z); GlStateManager.disableRescaleNormal(); renderDoor(te, partialTicks); GlStateManager.popMatrix(); GlStateManager.popAttrib(); } public void renderDoor(CounterTE te, float partialTicks) { GlStateManager.pushMatrix(); 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(); //Rotate renderer to match FACING GlStateManager.translate(.5F, 0, .5F); if(world.getBlockState(te.getPos()).getValue(CommonBlock.FACING) == EnumFacing.NORTH)GlStateManager.rotate(0, 0, 1, 0); if(world.getBlockState(te.getPos()).getValue(CommonBlock.FACING) == EnumFacing.EAST)GlStateManager.rotate(270, 0, 1, 0); if(world.getBlockState(te.getPos()).getValue(CommonBlock.FACING) == EnumFacing.SOUTH)GlStateManager.rotate(180, 0, 1, 0); if(world.getBlockState(te.getPos()).getValue(CommonBlock.FACING) == EnumFacing.WEST)GlStateManager.rotate(90, 0, 1, 0); GlStateManager.translate(-.5F, 0, -.5F); Tessellator tessellator = Tessellator.getInstance(); BufferBuilder bufferBuilder = tessellator.getBuffer(); bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); IBlockState stateLeft = NMFBlocks.counter.getDefaultState().withProperty(Counter.ASKFOR_LEFTDOOR, true); IBlockState stateRight = NMFBlocks.counter.getDefaultState().withProperty(Counter.ASKFOR_RIGHTDOOR, true); BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); IBakedModel modelLeft = dispatcher.getModelForState(stateLeft); IBakedModel modelRight = dispatcher.getModelForState(stateRight); GlStateManager.pushMatrix(); //Render LEFT door GlStateManager.translate(0.96875F, 0, 0.15625F); if(te.getMovingDelta() != 0) GlStateManager.rotate(-(te.getOpenProgress() + partialTicks * ((te.getMovingDelta() > 0) ? 1 : -1)), 0, 1, 0); else GlStateManager.rotate(-te.getOpenProgress(), 0, 1, 0); GlStateManager.translate(-0.96875F, 0, -0.15625F); GlStateManager.translate(-te.getPos().getX(), -te.getPos().getY(), -te.getPos().getZ()); dispatcher.getBlockModelRenderer().renderModel(world, modelLeft, stateLeft, te.getPos(), bufferBuilder, true); tessellator.draw(); GlStateManager.translate(te.getPos().getX(), te.getPos().getY(), te.getPos().getZ()); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); //Render RIGHT door bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); GlStateManager.translate(0.03125F, 0, 0.15625F); if(te.getMovingDelta() != 0) GlStateManager.rotate(te.getOpenProgress() + partialTicks * ((te.getMovingDelta() > 0) ? 1 : -1), 0, 1, 0); else GlStateManager.rotate(te.getOpenProgress(), 0, 1, 0); GlStateManager.translate(-0.03125F, 0, -0.15625F); GlStateManager.translate(-te.getPos().getX(), -te.getPos().getY(), -te.getPos().getZ()); dispatcher.getBlockModelRenderer().renderModel(world, modelRight, stateRight, te.getPos(), bufferBuilder, true); bufferBuilder.putNormal(0F, 1F, 0F); tessellator.draw(); GlStateManager.translate(te.getPos().getX(), te.getPos().getY(), te.getPos().getZ()); GlStateManager.popMatrix(); RenderHelper.enableStandardItemLighting(); GlStateManager.popMatrix(); } TESR is necessary because of block inventory rendering. That's actually the only reason why I don't use ASM animation... Edited September 13, 20196 yr by ZigTheHedge
September 13, 20196 yr Author Ah, nevermind. I've just changed IBlockState(s) for models to match FACING as well and removed rotation part from code. That fixed the lighting issue, so I'm happy
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.