有没有一种方法可以统一定义3D模型大小?像高度= 1,宽度= 3,深度= 3?
无论我在Blender中制作fbx大小如何,我都希望模型在统一场景中占据定义的空间。因此,我无法使用缩放比例,因为在Blender中更改模型尺寸会破坏此缩放比例。
我需要它是3宽,3长和1高的正方形,而不取决于从Blender导出的模型尺寸。有可能吗?
同一个问题,但从另一个角度来看-如何统一设置模型大小?只有比例设置,没有尺寸设置。看起来很奇怪。
到目前为止,我发现了一种变通方法,例如获取对象的渲染边界和在脚本中调整缩放比例,但这对我来说似乎不正确。
答案 0 :(得分:1)
您可以使用Mesh.bounds来获得3D模型的大小,而无需应用缩放。
然后您根据需要重新计算比例尺
// The desired scales
// x = width
// y = height
// z = depth
var targetScale = new Vector3(3, 1, 3);
var meshFilter = GetComponent<MeshFilter>();
var mesh = meshFilter.mesh;
// This would be equal to the 3D bounds if scale was 1,1,1
var meshBounds = mesh.bounds.size;
// This would make the model have world scale 1,1,1
var invertMeshBounds = new Vector3(1/meshBounds.x, 1/meshBounds.y, 1/meshBounds.z);
// Use this if you want exactly the scale 3,1,3 but maybe stretching the fbx
var finalScale = Vector3.Scale(invertMeshBounds, targetScale);
据我了解,您希望保持3D模型的正确相对比例,但使其适合定义的targetScale,因此我将使用3个值中的最小比例作为比例因子
var minFactor = Mathf.Min(finalScale.x, finalScale.y);
minFactor = Mathf.Min(minFactor, finalScale.z);
transform.localScale = Vector3.one * minFactor;