Jump to content

Rendering part of a block


zskamljic

Recommended Posts

I am looking for a way to render a part of a block, for example slabs and stairs (but from other blocks that don't have their stair variants as well (basically same textures on a different shape).

I have found a way to render the model via this code, and rendering the model does work, but I am having issues with finding a way to render only part of the said block, is there a way to "clip" the rendered model? Or at least get the faces and render them on a clipped model?

Link to comment
Share on other sites

Look at what tesslateBlock() does. The simple version without ambient occlusion is in pseudo code;

initialise the render state from the model and other passed parameters;
foreach direction {
    get the light for that face;
    get the quads for that face;
    put the quads with the lighting parameters in the vertex consumer;
}
do the same for quads that are not attaced to a face;

You want to do the same code but only for the faces you want to draw.

I have no idea how you would identify which of the extra quads not attached to a face you need to draw unless you know specifics about how the quads were baked.

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Link to comment
Share on other sites

Hm, rendering the faces would be enough for me (at least for the time being), but I'm somewhat lost on the last part of the loop.

I see that the quads have a sprite attached to them, so I assume rendering a subset of that sprite would be what I want, and for that it appears I need to manipulate vertices in the quad.

Looking at the buffer code in VertexConsumer.putBulkData I was able to extract vertices that fit the face, so I'll try manipulating those and report back. Thanks for the tip!

Link to comment
Share on other sites

I've got the rendering down (for a POC), if anyone needs the code it's available here, it procuces something like this:

ZympY8z.png

I think I'll also need to be needing to adjust the UVs a bit, but this is a great starting point. Now, I'm wondering if it's possible to obtain vertices from a VoxelShape? Looks like VoxelShape.bounds() returns AABB which fits my needs.

Looks like there's more to UVs though. There's UV0 and UV2 in the quad vertices, but UV2 seems to be used for overlay, and UV0 only has 2 floats, which seem to match texture uv0, which by the way, is not 0, nor does it go to 1. Instead values (for stone, for example) seem to look like this: 0.40629607,0.78134215; 0.40629607,0.81240785; 0.42182893,0.81240785; 0.42182893,0.78134215, which has me at a loss of what they mean, or what I am supposed to do with them to get the desired result

Edited by zskamljic
updated with newer info
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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I have a structure, and sometimes several mobs spawn there. This is a boss and must spawn alone. Here is the code for spawning entities in the structure { "type": "minecraft:jigsaw", "start_pool": "egyptcraft:boss_pyramid/start_pool", "size": 5, "max_distance_from_center": 80, "biomes": "#egyptcraft:has_structure/boss_pyramid", "step": "surface_structures", "start_height": { "absolute": 0 }, "project_start_to_heightmap": "WORLD_SURFACE_WG", "use_expansion_hack": false, "spawn_overrides": { "monster": { "bounding_box": "full", "spawns": [ { "type": "egyptcraft:anubis", "maxCount": 1, "minCount": 1, "weight": 100 } ] } } } Maybe it's something else?
    • I have OreGenEvent.GenerateMinable event, I need to get a chance to spawn (generate) every ore that is processed in this event. Also e.getType().name().toString() is name this is the same block name by which it can be entered in the Block.getByID?  forge 1.12.2 59(recommended)
    • Hello everybody! Out of nowhere my minecraft doesn't allow me to play on forge 1.19.2 I tried to reinstall minecraft, doesn't have any mod right now on the forge version. Tried the newest version of forge, tried recommended version as well. I have the newest version of Java as well...   I dont know why it stopped working but it just stopped completly out of nowhere...   Thank you so much for your help guys ❤️
    • Hello, my world is crashing at 0% loaded and I don't know why. (Forge 43.2.14, 1.19.2) I have two worlds that I play on, and one works and the other doesn't, even with the same mod list. Here's the crash report: https://pastebin.com/AUbRwkGj
    • Minecraft 1.12.2 Very frustrating error. only ever occurs on one device. Started yesterday without prompting (maybe java updated or something?) Says things that have been imported actually arent when running client Reinstalled Intellij, cleared cache, cleaned and rebuilt gradle, redownloaded the entire file from git. Nothing works. (I believe I have the right plugins installed, dependencies OK, and am using corretto 1.8).   One thing I did for more of the below errors was just to explicitly import them, which was working up until this little guy who literally does not exist in forge to import. the class inhereting something inhereting it refers to import net.minecraftforge.registries.IForgeRegistryEntry.Impl, not net.minecraftforge.registries.IForgeRegistryEntry$Impl as the output implies. also I didn't even have to manually import these things for it to work on my other device. (which is just importing the minecraft package that contains them), but here I did have to just to get rid of a few errors--not even make anything work?? I dont know. (edited) here's the aforementioned "below error" (one of many like it): error: cannot access net.minecraftforge.registries.IForgeRegistryEntry.Impl public class BlockBase extends Block {        ^   class file for net.minecraftforge.registries.IForgeRegistryEntry$Impl not found Here's the class BlockBase:   package com.quantum.exodus.common.blocks; import com.quantum.exodus.ExodusMod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraftforge.registries.IForgeRegistryEntry.Impl; public class BlockBase extends Block { protected String name; public BlockBase(Material material, String name) { super(material); this.name = name; setTranslationKey(name); setRegistryName(name); } public void registerItemModel(Item itemBlock) { ExodusMod.proxy.registerItemRenderer(itemBlock, 0, name); } public Item createItemBlock() { return new ItemBlock(this).setRegistryName(getRegistryName()); } @Override public BlockBase setCreativeTab(CreativeTabs tab) { super.setCreativeTab(tab); return this; } }
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.