2016-06-03 3 views
1

Я работаю в Unity и, таким образом, кодирую на C#, но любая идея или место для начала приветствуются.Я хочу создать сетку из силуэта

Я не знаю, как описать мою проблему, и если для этого есть «простое» решение, но я попробую. У меня есть объект (возможно, ограничивающий себя простыми фигурами), который бросает 2 тени. Я хотел бы создать сетку, которая является формой этой тени. Как вы можете видеть на изображении ниже, я нарисовал нужные сетки зеленым цветом.

desired meshes drawn in green

Я возился с изменением вершины моей исходной сетки, а в некоторых конкретных случаях (объекты без вращения) нашел решение, но я не нашел тот, который работает достаточно хорошо. У кого-нибудь есть идея, которая могла бы работать?

Спасибо заранее, Барт

+0

Вы можете попробовать использовать Raycasts из источников света через углы вашего красного куба и проверить, где луч попадает в стену – TheDjentleman

+0

, как вы знаете, как «толстый» объект должен быть? тень 2D –

+0

Это будет фиксированная ширина. 1 Единица, например. –

ответ

1

Я взял время, чтобы создать проект, который делает именно то, что вы сказали: Preview it here

Метод

Использование raycasts Я подсчитал, проецируемые вершины конкретного объекта от источника света. Метод может показаться неэффективным, но пока указанная сетка имеет меньшее количество вершин, все должно быть хорошо.

Затем, взяв среднее значение проецируемых вершин, вычислил положение проецируемого куба. Vector3 averagePosition = new Vector3(verticies.Average(vector => vector.x), verticies.Average(vector => vector.y), verticies.Average(vector => vector.z));

И, взяв диапазон каждой из проекционных компонент положения вершины (x, y, z), я вычислил масштаб куба. Vector3 averageScale = new Vector3(verticies.Max(vector => vector.x) - verticies.Min(vector => vector.x), verticies.Max(vector => vector.y) - verticies.Min(vector => vector.y), normalScale);

Примечание: Я не создаю совершенно новую сетку. Я просто манипулирую преобразованием готового куба с прикрепленным скриптом.

Недостатком является то, что этот метод ограничивается только одной осью. Может быть исправлено.

Скачать проект от Github

GitHub ссылка: https://github.com/MyIsaak/Shadow-Mesh/tree/master

Было бы здорово, если бы вы могли совершить какие-либо улучшения, внесенные, чтобы помочь сообществу. Вы можете использовать этот проект для коммерческого и некоммерческого использования.

+0

Я очень ценю время и усилия, которые вы тратите, пытаясь помочь, спасибо. После многих ошибок и ошибок я пришел к аналогичному результату, но не настолько чист и прост, как ваш код, так что это действительно полезно. Теперь основная проблема с морфированием сетки, которая имеет форму тени, состоит в том, что тень не всегда имеет ту же форму или столько вершин, что и исходный объект.(пример в ссылке) Но я уверен, что могу решить это с помощью вашего кода, так как я могу найти нужные вершины для создания желаемой сетки. ! [Пример и схема] (http://imgur.com/a/5xAYI) –