Jump to content

[1.8] Two Models Combined - Independent Transforms For Each


EverythingGames

Recommended Posts

After fixing an issue in my models, another one arose. I have an IPerspectiveAwareModel containing two IBakedModels, and combining them by returning a list of both the models' quads in one. My problem is that I need to combine the two models, with the first model to have its own transform (rotation, translation, scale), as well as the second model to have its own transform (rotation, translation, scale). Basically, I want two models combined in one with both of them using their own independent transform values. I really hope this is possible, otherwise my models are toast and its back to square one! Anyway, I really appreciate any help or responses, thanks!

 

Current Code (Taken from IPerspectiveAwareModel combining two IBakedModels)

@Override
public ItemCameraTransforms getItemCameraTransforms()
{

	return this.bakedmodelone.getItemCameraTransforms(); //Only uses the first model's transform values (problem) - this method forces you to provide only one transform value for the combined model as a whole.

}

@Override
public Pair<IBakedModel, Matrix4f> handlePerspective(TransformType transformtype)
{

	this.transformtype = transformtype;

	switch(transformtype)
	{
	case FIRST_PERSON : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().firstPerson); break; }
	case THIRD_PERSON : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().thirdPerson); break; }
	case GUI : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().gui); break; }
	case HEAD : { RenderItem.applyVanillaTransform(this.getItemCameraTransforms().head); break; }
	default : break;
	}

	return Pair.of(this, null);

}

 

As a side note, I realize that the above method "getItemCameraTransforms()" requires you to return transformation values for the model as a whole. Remember, I want the model to be combined as a whole, but still be able to have the two combined models use their own independent transform values. Hope that makes a little sense.

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Link to comment
Share on other sites

Off topic, sort of, but I still don't see why you even need IPerspectiveAwareModel if all you are going to do is apply the vanilla transformations... that would be done for you with a standard model.

 

Anyway, to your problem: the only way I can think of to have 2 models with different transformations is to actually have 2 models, each with its own JSON defining its transformations for each perspective, and probably to render them separately so that the different transformations don't interfere with each other.

 

Note that you can actually render other models independently, though I don't know how recommended this is... there is very likely a better way, but this is what I hacked together for my mod when I wanted to render different arrow items dynamically into a bow while it is in use.

 

I'm sure you'll get better ideas soon, but that might get you started towards something that at least works in the meantime. ;)

Link to comment
Share on other sites

Thanks, @coolAlias. The reason for using IPerspectiveAwareModel is because I am rendering / de-rendering models based on first / third person / gui / head and not altering they're transform values. When combining the two models, the new transform is added to the new wrapped model (contains the two IBakedModels). For future reference, the first model is a gun and the second is an arm, the arm only renders in first person. The arm and gun have seperate transforms that need to stay when combined - IPerspectiveAwareModel makes the arm model use the gun model's transforms. Wouldn't it make sense to be able to keep independent transforms when combining general baked quads (combining models)? Anyway, I really need a fix! I am missing IItemrenderer already!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Link to comment
Share on other sites

You should probably render the arm model using RenderPlayerEvent or RenderHandEvent rather than trying to jam it on to the item model, but you should still be able to use the technique I showed in my link above if you really want to do them 'together'. Basically, you would render the arm model separately anyway, irrespective of whatever model you will return for the actual gun.

 

While I'm sure there is probably a way to do what you set out to do (merge 2 separate models with 2 separate transformation matrices together into 1), it's very likely far more technically challenging than it would be worth. Is there any particular reason you can't render the 2 models separately?

Link to comment
Share on other sites

Those are good suggestions, but I think they won't work. First, RenderPlayerEvent and RenderHandEvent might as well be the same, canceling the RenderHandEvent de-renders the whole player model completely, and the first person arm is still there - same with the RenderPlayerEvent. I have tried this before, and the problems that arose were:

1.) The rendered arm needs to only be rendered in first person.

2.) The rendered arm doesn't rotate along with the player - it stays in the exact same place.

3.) How would the equip animation play when switching items for the arm? I.E. the arm rising up and down while switching items

4.) How to know when to render said arm

 

So as you can see, there would be many, many problems when rendering a "generic model" arm separate from an item. This is why IItemRenderer needs to come back - maybe they could improve it by letting models written in code be combined with .JSON models (yes, this isn't the suggestion board ;))

 

Anyway, would you happen to know a way to render a java model (models just like from Techne) with a regular .JSON together? Thanks, and I am happy to hear all comments and suggestions!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Link to comment
Share on other sites

Oh, you don't want the original arm to render either? I thought you were rendering a 2nd arm in addition to the first, in which case you wouldn't cancel any of the events at all, just render your extra model at that time and leave everything else as is.

 

You can still render Java models the same as before, btw - that's how Entities are rendered, even in 1.8. I have yet to do so within the same context as an Item being rendered, but I don't imagine there would be any technical reason preventing one from doing so, though you may have to deal with unexpected GL states depending on when you do it.

 

Hopefully someone else more knowledgeable with OpenGL / rendering in Minecraft can help out - it's not exactly my strong suit :P

Link to comment
Share on other sites

I know what you mean about rendering - not my preferred modding subject! This is a must-have feature for my mod, I've already made a suggestion for an interface doing exactly what I need (it's actually a very useful suggestion, IMO), though I can't depend on it being added. Back when IItemRenderer was implemented, the way it was done was to create Java models (the arm) and then another Java model (gun) - you would then render them together in first person, and the gun by itself in every other perspective including entity item. Even with the benefits of the new model system, implementing many interfaces and modifying the code just reduces readability, especially when RainWarrior marks everything as deprecated (saying to use the new IFlexibleBaledModel to replace deprecated IBakedModel, but IFlexibleBakedModel is a child class of IBakedModel ;)). Anyway, this is going to be hard, hopefully I can make it happen!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

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



×
×
  • Create New...

Important Information

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