Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.11] Ways to render in a TESR


Awesome_Spider
 Share

Recommended Posts

Now you are creating modified versions of the quads and then decide you no longer need them and render the original model instead.

You need to render the modified quads.

 

8 hours ago, Awesome_Spider said:

Isn't that what I'm doing? I'm rotating one of the cubes?

You are creating a transformed copy of the quads. You are not modifying the model.

Link to comment
Share on other sites

Ok. I tried that and it only renders the top face (unrotated). I'm probably still doing it wrong.

    protected static BlockRendererDispatcher blockRenderer;

    public int curStep = 0;
    public int totalSteps = 0;

    @Override
    public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) {
        if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher();
        BlockPos pos = te.getPos();
        IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos);
        IBlockState state = world.getBlockState(pos);

        final IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state);

        renderer.setTranslation(x - pos.getX() + 2.0f, y - pos.getY(), z - pos.getZ() + 2.0f);

        final List<BakedQuad> quadList = model.getQuads(state, null, 0L);

        for(BakedQuad quad : quadList) {
            transform(quad, new TRSRTransformation(new Vector3f(0, 0, 0), new Quat4f(-0.49f, 0, 0, -0.87f), new Vector3f(1, 1, 1), new Quat4f(0.49f, 0, 0, 0.87f)));
        }

        final IBakedModel newModel = new IBakedModel() {
            @Override
            public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
                return quadList;
            }

            @Override
            public boolean isAmbientOcclusion() {
                return model.isAmbientOcclusion();
            }

            @Override
            public boolean isGui3d() {
                return model.isGui3d();
            }

            @Override
            public boolean isBuiltInRenderer() {
                return model.isBuiltInRenderer();
            }

            @Override
            public TextureAtlasSprite getParticleTexture() {
                return model.getParticleTexture();
            }

            @Override
            public ItemCameraTransforms getItemCameraTransforms() {
                return model.getItemCameraTransforms();
            }

            @Override
            public ItemOverrideList getOverrides() {
                return model.getOverrides();
            }
        };

        blockRenderer.getBlockModelRenderer().renderModel(world, newModel, state, pos, renderer, false);
    }

    //This method was borrowed from Vazkii's mod called Botania. It was modified to work for a block instead of an item.
    public static BakedQuad transform(BakedQuad quad, final TRSRTransformation transform) {
        UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(DefaultVertexFormats.BLOCK);
        final IVertexConsumer consumer = new VertexTransformer(builder) {
            @Override
            public void put(int element, float... data) {
                VertexFormatElement formatElement = DefaultVertexFormats.BLOCK.getElement(element);
                switch(formatElement.getUsage()) {
                    case POSITION: {
                        float[] newData = new float[3];
                        Vector3f vec = new Vector3f(data);
                        transform.getMatrix().transform(vec);
                        vec.get(newData);
                        parent.put(element, newData);
                        break;
                    }
                    default: {
                        parent.put(element, data);
                        break;
                    }
                }
            }
        };

        quad.pipe(consumer);
        return builder.build();
    }

 

Mind you, I am creating a new instance of the model every rendering tick. Not sure how to get around that.

Link to comment
Share on other sites

Thanks for pointing that out. Now it isn't rendering.

protected static BlockRendererDispatcher blockRenderer;

    @Override
    public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) {
        if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher();
        BlockPos pos = te.getPos();
        IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos);
        IBlockState state = world.getBlockState(pos);

        final IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state);

        renderer.setTranslation(x - pos.getX() + 2.0f, y - pos.getY(), z - pos.getZ() + 2.0f);

        final List<BakedQuad> quadList = model.getQuads(state, null, 0L);
        final List<BakedQuad> newQuadList = Lists.newArrayList();


        for(BakedQuad quad : quadList) {
            newQuadList.add(transform(quad, new TRSRTransformation(new Vector3f(0, 0, 0), new Quat4f(-0.49f, 0, 0, -0.87f), new Vector3f(1, 1, 1), new Quat4f(0.49f, 0, 0, 0.87f))));
        }

        final IBakedModel newModel = new IBakedModel() {
            @Override
            public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
                return newQuadList;
            }

            @Override
            public boolean isAmbientOcclusion() {
                return model.isAmbientOcclusion();
            }

            @Override
            public boolean isGui3d() {
                return model.isGui3d();
            }

            @Override
            public boolean isBuiltInRenderer() {
                return model.isBuiltInRenderer();
            }

            @Override
            public TextureAtlasSprite getParticleTexture() {
                return model.getParticleTexture();
            }

            @Override
            public ItemCameraTransforms getItemCameraTransforms() {
                return model.getItemCameraTransforms();
            }

            @Override
            public ItemOverrideList getOverrides() {
                return model.getOverrides();
            }
        };

        blockRenderer.getBlockModelRenderer().renderModel(world, newModel, state, pos, renderer, false);
    }

    //This method was borrowed from Vazkii's mod called Botania. It was modified to work for a block instead of an item.
    public static BakedQuad transform(BakedQuad quad, final TRSRTransformation transform) {
        UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(DefaultVertexFormats.BLOCK);
        final IVertexConsumer consumer = new VertexTransformer(builder) {
            @Override
            public void put(int element, float... data) {
                VertexFormatElement formatElement = DefaultVertexFormats.BLOCK.getElement(element);
                switch(formatElement.getUsage()) {
                    case POSITION: {
                        float[] newData = new float[3];
                        Vector3f vec = new Vector3f(data);
                        transform.getMatrix().transform(vec);
                        vec.get(newData);
                        parent.put(element, newData);
                        break;
                    }
                    default: {
                        parent.put(element, data);
                        break;
                    }
                }
            }
        };

        quad.pipe(consumer);
        return builder.build();
    }

 

Did I get the Quat4fs right? I haven't really worked with them. I used this to get the numbers for them.

Edited by Awesome_Spider
Link to comment
Share on other sites

Ok. I think I'm doing that now. But it isn't rendering.

 

protected static BlockRendererDispatcher blockRenderer;

    @Override
    public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) {
        if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher();
        BlockPos pos = te.getPos();
        IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos);
        IBlockState state = world.getBlockState(pos);

        final IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state);

        renderer.setTranslation(x - pos.getX() + 2.0f, y - pos.getY(), z - pos.getZ() + 2.0f);

        for(int i = 0; i > model.getQuads(state, null, 0L).size(); i++) {
            BakedQuad quad = model.getQuads(state, null, 0L).get(i);
            quad = transform(quad, new TRSRTransformation(new Vector3f(0, 0, 0), new Quat4f(-0.49f, 0, 0, -0.87f), new Vector3f(1, 1, 1), new Quat4f(0.49f, 0, 0, 0.87f)));

            renderer.addVertexData(quad.getVertexData());
        }
    }

    //This method was borrowed from Vazkii's mod called Botania. It was modified to work for a block instead of an item.
    public static BakedQuad transform(BakedQuad quad, final TRSRTransformation transform) {
        UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(DefaultVertexFormats.BLOCK);
        final IVertexConsumer consumer = new VertexTransformer(builder) {
            @Override
            public void put(int element, float... data) {
                VertexFormatElement formatElement = DefaultVertexFormats.BLOCK.getElement(element);
                switch(formatElement.getUsage()) {
                    case POSITION: {
                        float[] newData = new float[3];
                        Vector3f vec = new Vector3f(data);
                        transform.getMatrix().transform(vec);
                        vec.get(newData);
                        parent.put(element, newData);
                        break;
                    }
                    default: {
                        parent.put(element, data);
                        break;
                    }
                }
            }
        };

        quad.pipe(consumer);
        return builder.build();
    }

 

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
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.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • # Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # #      102.54.94.97     rhino.acme.com          # source server #       38.25.63.10     x.acme.com              # x client host # localhost name resolution is handled within DNS itself. #    127.0.0.1       localhost #    ::1             localhost 127.0.0.1 checkhost.local 127.0.0.1 checkhost.local 109.94.209.70      *.fitgirl-repacks.xyz           # Fake FitGirl site 127.0.0.1 checkhost.local 127.0.0.1 checkhost.local 109.94.209.70      *.fitgirl-repacks.xyz           # Fake FitGirl site 109.94.209.70      fitgirlrepacks.in               # Fake FitGirl site 109.94.209.70      www.fitgirlrepacks.in           # Fake FitGirl site 109.94.209.70      fitgirlrepacks.co               # Fake FitGirl site 109.94.209.70      fitgirl-repacks.cc              # Fake FitGirl site 109.94.209.70      fitgirl-repacks.to              # Fake FitGirl site 109.94.209.70      fitgirl-repack.com              # Fake FitGirl site 109.94.209.70      fitgirl-repacks.website         # Fake FitGirl site 109.94.209.70      fitgirlrepack.games             # Fake FitGirl site 109.94.209.70      www.fitgirlrepacks.co           # Fake FitGirl site 109.94.209.70      www.fitgirl-repacks.cc          # Fake FitGirl site 109.94.209.70      www.fitgirl-repacks.to          # Fake FitGirl site 109.94.209.70      www.fitgirl-repack.com          # Fake FitGirl site 109.94.209.70      www.fitgirl-repacks.website     # Fake FitGirl site 109.94.209.70      ww9.fitgirl-repacks.xyz         # Fake FitGirl site 109.94.209.70      www.fitgirlrepack.games         # Fake FitGirl site 109.94.209.70      *.fitgirl-repacks.xyz           # Fake FitGirl site 109.94.209.70      fitgirl-repacks.xyz             # Fake FitGirl site 109.94.209.70      fitgirl-repack.net              # Fake FitGirl site 109.94.209.70      www.fitgirl-repack.net          # Fake FitGirl site 109.94.209.70      fitgirlpack.site                # Fake FitGirl site 109.94.209.70      www.fitgirlpack.site            # Fake FitGirl site 51.68.172.243 authserver.mojang.com 51.68.172.243 sessionserver.mojang.com 51.68.172.243 launchermeta.mojang.com  
    • Oh, I just found a similar question. I'll check it out.
    • I am trying to implement Mana. If I can add it to the Player after creating the Manadata, I think I can create it Is there a way to solve this or a class I can refer to?
    • I opened and waht is the next?
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.