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

Trying to understand the MatrixStack's mulPose and translate methods


Sunfished
 Share

Recommended Posts

Hello! I'm currently working on a custom entity that can hold items in their hands, but I'm somewhat confused as to how to properly align the rendered item to model's arms. My model is somewhat different than the vanilla mobs, so I take it that I had to create a custom render layer for this. I've looked through both the normal HeldItemLayer and the Fox's implementation on how this was done to get some hints on how this was done, (since the fox is somewhat similar to my model in that they both hold the items on their "heads"), and the part I'm stuck at are the two methods of the MatrixStack I assume are used to align the item correctly: mulPose and translate.

I would love some sort of guidance on how these two work, since I couldn't find a good explanation of them.

From what I achieved so far, I (believe) I managed to align the item to the model's arms, but because of how the model is structured, (the arms of the entity are on its head, which also serve as its body), it creates some issues whenever the entity turns and moves its head. For a clearer understanding of this problem, here are some images:

6635617a7a.png

when idle, the entity has the item aligned properly, (but not perfect)

 

ed5cc93f4f.gif

a small gif showcasing the weird rotational movement. I would assume this is caused by my improper implementation of the mulPose and translate methods. a weird quirk to note about this issue is that it seems to be influenced by his legs, which is something I would need to address as well.

 

If you would like to see the files, here are some links in the Github to the important files:

Github

Renderer

HeldItemLayer Implementation

Model

 

Thank you for taking your time to look at this!

 

Link to comment
Share on other sites

looks like you're applying yaw and pitch swapped during partial ticks. That is, you're applying a large yaw change to the pitch angle and a small pitch change to the yaw angle.

As for how the matrix works, you'll want to read up on projection matricies:
https://jsantell.com/3d-projection/

  • Thanks 1

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.

Link to comment
Share on other sites

2 hours ago, Draco18s said:

looks like you're applying yaw and pitch swapped during partial ticks. That is, you're applying a large yaw change to the pitch angle and a small pitch change to the yaw angle.

As for how the matrix works, you'll want to read up on projection matricies:
https://jsantell.com/3d-projection/

thank you for the quick response! I'll definitely look into that.

Link to comment
Share on other sites

There's probably better resources, but I skimmed that one, and it had some interactive graphics that explain what goes on.

  • Thanks 1

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.

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.

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

    • ---- Minecraft Crash Report ---- // Who set us up the TNT? Time: 10/24/21, 8:51 PM Description: Initializing game org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363)     at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:208)     at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)     at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)     at meteordevelopment.meteorclient.MixinPlugin$Transformer.transformClassBytes(MixinPlugin.java:37)     at net.fabricmc.loader.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:162)     at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:154)     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)     at net.minecraft.class_757.<init>(class_757.java:283)     at net.minecraft.class_310.<init>(class_310.java:565)     at net.minecraft.client.main.Main.main(Main.java:179)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.base/java.lang.reflect.Method.invoke(Method.java:567)     at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:234)     at net.fabricmc.loader.launch.knot.Knot.launch(Knot.java:153)     at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:28) Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure: Redirector updateHasStatusEffectProxy(Lnet/minecraft/class_746;Lnet/minecraft/class_1291;)Z in meteor-client.mixins.json:LightmapTextureManagerMixin failed injection check, (0/1) succeeded. Scanned 1 target(s). Using refmap meteor-client-refmap.json     at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.postInject(InjectionInfo.java:408)     at org.spongepowered.asm.mixin.transformer.MixinTargetContext.applyInjections(MixinTargetContext.java:1291)     at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyInjections(MixinApplicatorStandard.java:1042)     at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:395)     at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:320)     at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:345)     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:569)     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)     ... 17 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363)     at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:208)     at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)     at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)     at meteordevelopment.meteorclient.MixinPlugin$Transformer.transformClassBytes(MixinPlugin.java:37)     at net.fabricmc.loader.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:162)     at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:154)     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)     at net.minecraft.class_757.<init>(class_757.java:283)     at net.minecraft.class_310.<init>(class_310.java:565) -- Initialization -- Details: Stacktrace:     at net.minecraft.client.main.Main.main(Main.java:179)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.base/java.lang.reflect.Method.invoke(Method.java:567)     at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:234)     at net.fabricmc.loader.launch.knot.Knot.launch(Knot.java:153)     at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:28) -- System Details -- Details:     Minecraft Version: 1.17.1     Minecraft Version ID: 1.17.1     Operating System: Windows 10 (amd64) version 10.0     Java Version: 16.0.1, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 653549032 bytes (623 MiB) / 1778384896 bytes (1696 MiB) up to 2147483648 bytes (2048 MiB)     CPUs: 12     Processor Vendor: AuthenticAMD     Processor Name: AMD Ryzen 5 3600 6-Core Processor                   Identifier: AuthenticAMD Family 23 Model 113 Stepping 0     Microarchitecture: Zen 2     Frequency (GHz): 3.59     Number of physical packages: 1     Number of physical CPUs: 6     Number of logical CPUs: 12     Graphics card #0 name: Radeon RX 580 Series     Graphics card #0 vendor: Advanced Micro Devices, Inc. (0x1002)     Graphics card #0 VRAM (MB): 4095.00     Graphics card #0 deviceId: 0x67df     Graphics card #0 versionInfo: DriverVersion=27.20.22025.1006     Memory slot #0 capacity (MB): 8192.00     Memory slot #0 clockSpeed (GHz): 2.40     Memory slot #0 type: DDR4     Virtual memory max (MB): 30651.30     Virtual memory used (MB): 17073.36     Swap memory total (MB): 22528.00     Swap memory used (MB): 1513.81     JVM Flags: 9 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx2G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M     Fabric Mods:          apoli: Apoli 2.0.3         baritone: Baritone 1.7.0         calio: Calio 1.0.3         cardinal-components-base: Cardinal Components API (base) 3.1.1         cardinal-components-entity: Cardinal Components API (entities) 3.1.1         cloth-basic-math: Cloth Basic Math 0.5.1         cloth-config2: Cloth Config v4 5.0.34         fabric: Fabric API 0.41.0+1.17         fabric-api-base: Fabric API Base 0.3.0+a02b446318         fabric-api-lookup-api-v1: Fabric API Lookup API (v1) 1.3.0+cbda931818         fabric-biome-api-v1: Fabric Biome API (v1) 3.2.0+cbda931818         fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.5+a02b446318         fabric-command-api-v1: Fabric Command API (v1) 1.1.3+5ab9934c18         fabric-commands-v0: Fabric Commands (v0) 0.2.2+92519afa18         fabric-containers-v0: Fabric Containers (v0) 0.1.12+cbda931818         fabric-content-registries-v0: Fabric Content Registries (v0) 0.3.0+cbda931818         fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.1.5+be9da31018         fabric-dimensions-v1: Fabric Dimensions API (v1) 2.0.11+6cefd57718         fabric-entity-events-v1: Fabric Entity Events (v1) 1.3.0+57bef5a318         fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.4.10+fc40aa9d18         fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.2.1+92519afa18         fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.7+cbda931818         fabric-item-api-v1: Fabric Item API (v1) 1.2.4+cbda931818         fabric-item-groups-v0: Fabric Item Groups (v0) 0.2.10+b7ab612118         fabric-key-binding-api-v1: Fabric Key Binding API (v1) 1.0.4+cbda931818         fabric-keybindings-v0: Fabric Key Bindings (v0) 0.2.2+36b77c3e18         fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 1.4.4+a02b446318         fabric-loot-tables-v1: Fabric Loot Tables (v1) 1.0.4+a02b446318         fabric-mining-levels-v0: Fabric Mining Levels (v0) 0.1.3+92519afa18         fabric-models-v0: Fabric Models (v0) 0.3.0+a02b446318         fabric-networking-api-v1: Fabric Networking API (v1) 1.0.13+cbda931818         fabric-networking-blockentity-v0: Fabric Networking Block Entity (v0) 0.2.11+a02b446318         fabric-networking-v0: Fabric Networking (v0) 0.3.2+92519afa18         fabric-object-builder-api-v1: Fabric Object Builder API (v1) 1.10.9+cbda931818         fabric-object-builders-v0: Fabric Object Builders (v0) 0.7.3+a02b446318         fabric-particles-v1: Fabric Particles (v1) 0.2.4+a02b446318         fabric-registry-sync-v0: Fabric Registry Sync (v0) 0.7.11+7931163218         fabric-renderer-api-v1: Fabric Renderer API (v1) 0.4.4+cbda931818         fabric-renderer-indigo: Fabric Renderer - Indigo 0.4.8+cbda931818         fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 3.2.4+7931163218         fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.1.5+a02b446318         fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 0.1.14+4658223018         fabric-rendering-v0: Fabric Rendering (v0) 1.1.5+7931163218         fabric-rendering-v1: Fabric Rendering (v1) 1.9.0+7931163218         fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.4.8+a00e834b18         fabric-screen-api-v1: Fabric Screen API (v1) 1.0.4+cbda931818         fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.1.8+cbda931818         fabric-structure-api-v1: Fabric Structure API (v1) 1.1.13+5ab9934c18         fabric-tag-extensions-v0: Fabric Tag Extensions (v0) 1.2.1+b06cb95b18         fabric-textures-v0: Fabric Textures (v0) 1.0.6+a02b446318         fabric-tool-attribute-api-v1: Fabric Tool Attribute API (v1) 1.2.12+b7ab612118         fabric-transfer-api-v1: Fabric Transfer API (v1) 1.4.0+7931163218         fabricloader: Fabric Loader 0.11.7         fallflyinglib: FallFlyingLib 3.0.0-beta.2         java: OpenJDK 64-Bit Server VM 16         meteor-client: Meteor Client 0.4.5         minecraft: Minecraft 1.17.1         origins: Origins 1.1.2         playerabilitylib: Pal 1.3.0-nightly.1.17-rc1         reach-entity-attributes: Reach Entity Attributes 2.1.1     Launched Version: fabric-loader-0.11.7-1.17.1     Backend library: LWJGL version 3.2.2 build 10     Backend API: Radeon RX 580 Series GL version 3.2.14742 Core Profile Forward-Compatible Context 21.8.2 27.20.22025.1006, ATI Technologies Inc.     Window size: <not initialized>     GL Caps: Using framebuffer using OpenGL 3.2     GL debug messages:      Using VBOs: Yes     Is Modded: Definitely; Client brand changed to 'fabric'     Type: Client (map_client.txt)     CPU: 12x AMD Ryzen 5 3600 6-Core Processor 
    • If you want the more future proof in-code solution that doesn't require an arbitrary hardcoded string interpolation,   .withStyle(ChatFormatting.GOLD) this call on the `TextComponent` will color it. You can use any ChatFormatting enum constant, including ones that are added after the fact, and you don't have to consult some table on the internet to find what you want.
    • No, you would need capabilities for that (if an existing entity is resistant, or the player) unless only your own mobs are resistant.
    • https://maven.minecraftforge.net/net/minecraftforge/eventbus/3.0.5/eventbus-3.0.5-service.jar https://maven.minecraftforge.net/net/minecraftforge/accesstransformers/2.2.0/accesstransformers-2.2.0-shadowed.jar TLDR: The vanilla launcher is crap, so we have to do a work around which is screwing up on creeperhost.
    • To my knowledge, if Structurize isn't in the list of mods, it'll work on 1.16.5 by default, without you needing to change anything. We implemented a Version Compatibility Matrix to make this easier for you.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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