我想在Unity3D中找到游戏对象可见部分的2D边界框(BB)。**
由于没有名声,所以我无法发布图片,所以这里有Imgur的链接:
起点: Image
显示初始场景摄像机。例如,我想获得过往车辆车轮的BB。
目标:Image
我想以有效的方式显示相当小的BB。使用的方法非常昂贵,我想避免使用它。它适用于输入图片的分段版本,看起来类似于:Image。
当前方法:
Image
这将使用标记为滚轮的所有GameObjects(GO)的边界,并调用类似以下的函数:
Rect GetBoundingBox(GameObject go, Camera camera, float margin = 0f)
{
Rect rect = new Rect(-1f, -1f, -1f, -1f);
Vector3[] v; // Vertices
// Object is behind camera
if (camera.WorldToScreenPoint(go.GetComponentInChildren<Renderer>().bounds.center).z < 0)
return rect;
// get first mesh filter
v = go.GetComponentInChildren<MeshFilter>().mesh.vertices;
// maybe the game object hast no mesh yet... and is empty
if (v.Length < 1 || v == null)
return rect;
for (int i = 0; i < v.Length; i++)
{
//World space
v[i] = go.transform.TransformPoint(v[i]);
//GUI space
v[i] = camera.WorldToScreenPoint(v[i]);
v[i].y = Screen.height - v[i].y;
}
Vector3 min = v[0];
Vector3 max = v[0];
for (int i = 1; i < v.Length; i++)
{
min = Vector3.Min(min, v[i]);
max = Vector3.Max(max, v[i]);
}
//Construct a rect of the min and max positions and apply some margin
rect = Rect.MinMaxRect(min.x, min.y, max.x, max.y);
// apply optional margin
rect.xMin -= margin;
rect.xMax += margin;
rect.yMin -= margin;
rect.yMax += margin;
return rect;
}
出现两个问题。
我对每个正确方向的提示都很满意!
对于有兴趣的人,背景是开发用于生成/模拟深度学习项目的带标签的训练数据的应用程序。