Получить список вершин

Программирование на Юнити.

Получить список вершин

Сообщение miller 06 сен 2011, 10:27

Добрый день уважаемые форумчане
подскажите как получить список вершин при столкновении с объектом

Синтаксис:
Используется csharp
    void OnCollisionEnter(Collision collision)
    {
        if ((collision.gameObject.name == "Sphere") || (collision.gameObject.name == "Rocket_left(Clone)"))
        {
            foreach (ContactPoint cp in collision.contacts)
            {
                print(cp.point); // Получаю список точек столкновения но это видимо точки коллайдера
            }
        }

          Test(collision.contacts);

    }

void Test(ContactPoint[] cps)
{
        Mesh mesh = this.GetComponent<MeshFilter>().mesh;
        if (baseVertices == null)
        {
            baseVertices = mesh.vertices;
        }
        Vector3[] vertices = new Vector3[baseVertices.Length];

        foreach (ContactPoint cp in cps)
        {
            print(cp.point);
        }

//В итогде тут совершенно другие точки отличные от точек стокновения
...
}
 


Как точки столкновения найти в меше обьекта ? Просто вроде точки столновения глобальные имеют координаты а вершины модели локальные...
miller
UNIт
 
Сообщения: 85
Зарегистрирован: 01 апр 2009, 19:26
Откуда: Н.Новгород
  • Сайт

Re: Получить список вершин

Сообщение burlak 06 сен 2011, 11:31

перевести глобальные координаты в локальные? - transform.InverseTransformPoint
или тебе что то другое требуется?
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Получить список вершин

Сообщение miller 06 сен 2011, 12:44

Синтаксис:
Используется csharp


    void OnCollisionEnter(Collision collision)
    {
        if ((collision.gameObject.name == "Sphere") || (collision.gameObject.name == "Rocket_left(Clone)"))
        {
            GameObject go = (GameObject)Instantiate(DustEffect, this.transform.position, this.transform.rotation);
            Destroy(go, 1);

            Matrix4x4 matrix = transform.worldToLocalMatrix;
            Vector3[] mass = new Vector3[collision.contacts.Length];
            int i = 0;
            foreach (ContactPoint cp in collision.contacts)
            {
                //mass[i] = matrix.MultiplyPoint(cp.point);
                mass[i] = transform.InverseTransformPoint(cp.point);
                i++;
            }

            scale+= 0.5f;
            life--;
            MessDef(mass);
        }

    }

    void MessDef(Vector3[] contact_point)
    {
        Mesh mesh = this.GetComponent<MeshFilter>().mesh;
        if (baseVertices == null)
        {
            baseVertices = mesh.vertices;
        }
        Vector3[] vertices = new Vector3[baseVertices.Length];

       
     
        float timex = Time.time * speed + 0.1365143f;
        float timey = Time.time * speed + 1.21688f;
        float timez = Time.time * speed + 2.5564f;
        for (var i = 0; i < vertices.Length; i++)
        {
            Vector3 vertex = baseVertices[i];
            foreach (Vector3 vtemp in contact_point)
            {
                if (vtemp == vertex)
                {
                    print("this vertex deform!");
                }
            }

 


Это для деформации Mesh при столкновении вроде получаю вершины с которыми столкнулся обьект могу но не могу найти их среди вершин mesh... Мож что то не так ?
miller
UNIт
 
Сообщения: 85
Зарегистрирован: 01 апр 2009, 19:26
Откуда: Н.Новгород
  • Сайт

Re: Получить список вершин

Сообщение miller 06 сен 2011, 12:47

тончо я же получаю веришины обьекта с которым стокнулись, а как получить с чес столкнулся текущий объект (с какими вершинами) ?
miller
UNIт
 
Сообщения: 85
Зарегистрирован: 01 апр 2009, 19:26
Откуда: Н.Новгород
  • Сайт

Re: Получить список вершин

Сообщение seaman 06 сен 2011, 14:12

Может я что и не понял, но mass содержит точки соударения, а не вершины. Причем на втором объекте (в который ударился объект на котором скрипт). Вы же их пытаетесь сравнить с вершинами первого объекта (на котором скрипт).
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Получить список вершин

Сообщение miller 06 сен 2011, 14:56

я про это и описал выше, ступил извнияюсь вопрос в следующем как получить список вершин на которых воздействовал столкнувшийся с ним обьект ?
miller
UNIт
 
Сообщения: 85
Зарегистрирован: 01 апр 2009, 19:26
Откуда: Н.Новгород
  • Сайт

Re: Получить список вершин

Сообщение burlak 06 сен 2011, 15:29

ИМХО, физика дает точки соприкосновения двух коллайдеров. При столконовении двух сфер например вершин вообще нет - есть просто точка пересечения сфер. Если меши сталкиваются, чаще всего возможна ситуация когда одна точка первого меша попадает на плоскость второго.

Думаю, проще всего перебрать точки мешей внутри некой сферы с центром в точке столконовения и подвинуть их на некое расстояние которое зависит от дальности до центра - получится "смазанная" деформация
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12