Пятница, 27 Декабря 2024, 10:21

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Перемещение вертексов.
JessyStormДата: Пятница, 13 Мая 2016, 15:33 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Привет.
Нужен скрипт, предпочтительно на шарпе.
Суть:
1. Взять все вертексы меша.
2. Пустить от каждого вертекса рейкаст вниз, с игнорированием некоторых слоев.
3. Опустить каждый вертекс в конечную точку луча.
Все.
Взамен могу предложить плюсик или несложную 3д модель.
Пишите на форуме или в скайп psihrus1. Спасибо.


https://www.artstation.com/artist/jessystorm

Сообщение отредактировал JessyStorm - Пятница, 13 Мая 2016, 15:35
MANMANAДата: Суббота, 14 Мая 2016, 00:28 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
набросал. как-то так:

Код
using UnityEngine;

public class MoveVertices : MonoBehaviour {

    void Start () {
    }

    void Update() {

  if (Input.GetKeyDown ("space")) {
   Mesh mesh = GetComponent<MeshFilter> ().mesh;
   Vector3[] vertices = mesh.vertices;
   int i = 0;
   while (i < vertices.Length) {
    RaycastHit hit;
     if (Physics.Raycast (transform.TransformPoint (vertices [i]), -Vector3.up, out hit, 100.0f)) {
   
     Debug.DrawLine (transform.TransformPoint (vertices [i]), hit.point);

     vertices [i] = transform.InverseTransformPoint (hit.point);
    }
    i++;
   }
   mesh.vertices = vertices;
  }
    }
}


Добавлено (14 мая 2016, 00:28)
---------------------------------------------
рисует, правильно


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею


Сообщение отредактировал MANMANA - Воскресенье, 15 Мая 2016, 00:08
JessyStormДата: Суббота, 14 Мая 2016, 09:09 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Цитата MANMANA ()
using UnityEngine;

public class MoveVertices : MonoBehaviour {

void Start () {
}

void Update() {

if (Input.GetKeyDown ("space")) {
Mesh mesh = GetComponent<MeshFilter> ().mesh;
Vector3[] vertices = mesh.vertices;
int i = 0;
while (i < vertices.Length) {
RaycastHit hit;
if (Physics.Raycast (transform.TransformPoint (vertices [i]), -Vector3.up, out hit, 100.0f)) {

Debug.DrawLine (transform.TransformPoint (vertices [i]), hit.point);

vertices [i] = transform.InverseTransformPoint (hit.point);
}
i++;
}
mesh.vertices = vertices;
}
}
}

Криво работает. Вертексы перемещаются некорректно.


https://www.artstation.com/artist/jessystorm

Сообщение отредактировал JessyStorm - Суббота, 14 Мая 2016, 09:27
MANMANAДата: Суббота, 14 Мая 2016, 15:02 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
полагаю, существует какая-то зависимость от самой 3D модели и ее вершин. вот, например, 3D модель, которая отлично легла на примитивы Unity Квад (Box collider) и плоскость (Mesh collider).

Добавлено (14 мая 2016, 15:02)
---------------------------------------------
пысы Возможно, чтобы получить готовое решение, вам стоит найти скрипт симуляции одежды/ткани или подсмотреть в существующих ассетах симуляции одежды/ткани, например, в этом Shroud Cloth Simulation Engine (Bundle)


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
LertmindДата: Суббота, 14 Мая 2016, 16:39 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
MANMANA, скрипт работает правильно, насколько я пробовал опускать сферу на plane и цилиндр на plane и сферу одновременно. Конечно, надо снимать коллайдер с объекта на котором скрипт, чтобы не попадать на себя. Z-fighting тоже предсказуем. В чём кривость-то?
JessyStormДата: Суббота, 14 Мая 2016, 18:23 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Действительно, коллайдер забыл снять. Всем по плюсу, дамы и господа! biggrin Пришлось правда еще самому лейер маск дописать, про это ты забыл. Но все равно спасибо.
БТВ, если кому интересно, еще нужно добавить mesh.RecalculateBounds(); Чтобы не было косяков с отображением.


https://www.artstation.com/artist/jessystorm

Сообщение отредактировал JessyStorm - Суббота, 14 Мая 2016, 18:41
LertmindДата: Суббота, 14 Мая 2016, 20:50 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
JessyStorm, посмотрел Mesh, похоже надо ещё RecalculateNormals() вызывать, а судя по описанию, самому tangets обновлять, если необходимо.
MANMANAДата: Воскресенье, 15 Мая 2016, 00:11 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Цитата Lertmind ()
В чём кривость-то?

Да, про собственный коллайдер я как-то и позабыл smile Тяжелая неделя, желание помочь ближнему и рассеянное внимание, вопчем чем богаты smile


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг