(3D) 在缩放时保持对象对齐
(3D) keep objects aligned while scaling
我正在制作一个 3D 怪物创建器,我添加了一种组合部件的方法并解决了除缩放之外的所有问题。我通过简单地设置一个标志、将它们添加到嵌套数组列表并在用户更改组合实例时使用涉及 for 循环的 if 语句来组合 modelInstances。缩放时,对象保持静止,但在组中时,我需要它们移动一定量以保持形状一致。
目前,这是我的缩放方法:
switch (modelInstance[i].currentFlip) {
case 0:
modelInstance[i].scale.add(0.01f);
break;
case 1:
modelInstance[i].scale.add(-0.01f, 0.01f, 0.01f);
break;
case 2:
modelInstance[i].scale.add(-0.01f, -0.01f, 0.01f);
break;
case 3:
modelInstance[i].scale.add(0.01f, -0.01f, 0.01f);
break;
}
modelInstance[i].transform.set(modelInstance[i].basePosition, modelInstance[i].baseRotation, modelInstance[i].scale);
为澄清起见,这里有一个发生了什么的视频:https://youtu.be/kLjlcMVKAR0我希望组合对象的形状无论其大小如何都保持一致,这应该通过更改单个对象的定位来完成。我知道单个对象的位置、组合对象的位置、对象的当前比例以及单个对象的精确尺寸边界框。
我意识到要在更改单个对象的比例时保持组合形状的一致性,我必须缩放从质心到单个对象的位置差异。
modelInstance[i].basePosition.set(centreMass.cpy().add(modelInstance[i].distanceFromCentreMass.cpy().scl(modelInstance[i].scale)));
我正在制作一个 3D 怪物创建器,我添加了一种组合部件的方法并解决了除缩放之外的所有问题。我通过简单地设置一个标志、将它们添加到嵌套数组列表并在用户更改组合实例时使用涉及 for 循环的 if 语句来组合 modelInstances。缩放时,对象保持静止,但在组中时,我需要它们移动一定量以保持形状一致。
目前,这是我的缩放方法:
switch (modelInstance[i].currentFlip) {
case 0:
modelInstance[i].scale.add(0.01f);
break;
case 1:
modelInstance[i].scale.add(-0.01f, 0.01f, 0.01f);
break;
case 2:
modelInstance[i].scale.add(-0.01f, -0.01f, 0.01f);
break;
case 3:
modelInstance[i].scale.add(0.01f, -0.01f, 0.01f);
break;
}
modelInstance[i].transform.set(modelInstance[i].basePosition, modelInstance[i].baseRotation, modelInstance[i].scale);
为澄清起见,这里有一个发生了什么的视频:https://youtu.be/kLjlcMVKAR0我希望组合对象的形状无论其大小如何都保持一致,这应该通过更改单个对象的定位来完成。我知道单个对象的位置、组合对象的位置、对象的当前比例以及单个对象的精确尺寸边界框。
我意识到要在更改单个对象的比例时保持组合形状的一致性,我必须缩放从质心到单个对象的位置差异。
modelInstance[i].basePosition.set(centreMass.cpy().add(modelInstance[i].distanceFromCentreMass.cpy().scl(modelInstance[i].scale)));