BoundingBox видимой части GameObject относительно данной камеры - PullRequest
1 голос
/ 09 мая 2019

Я хочу найти 2D ограничивающую рамку (BB) видимой части Game-объекта в Unity3D. **

Благодаря тому, что у меня нет репутации, я не могу публиковать изображения, поэтому вот ссылки на Imgur:

Начальная точка: Изображение
Отображение начальной камеры сцены.Например, я хочу получить BB колес проезжающей машины.

Цель: Изображение
Показ довольно маленького BB, который я хочу получить эффективным способом.Используемый метод очень дорог, и я хочу избежать этого.Это работает на сегментированной версии входного изображения, похожего на это: Изображение .

Текущий подход: Изображение
Этоиспользует границы всех 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;
}

Появляются две проблемы.

  1. Получение всех BB, даже если GOкамера не видна.
  2. Даже если она видна, границы так же велики, как и сам GO, а не как видимая часть.

Я оченьрад каждому намеку в правильном направлении !!

Для заинтересованных людей задание - разработка приложения для генерации / симуляции маркированных обучающих данных для проекта глубокого обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...