Динамически генерировать объект с формой сегмента цилиндра - PullRequest
0 голосов
/ 27 августа 2018

Возможно ли создать объект, имеющий такую ​​динамическую форму, в единстве?

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

part of cylinder

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете программно генерировать сетки, как говорят комментарии.

Однако, если угол динамический, то есть часто меняется, это приведет к потере времени ЦП и пропускной способности графического процессора, которые лучше всего потратить на что-то другое. Лучший вариант - смоделировать (или сгенерировать программно при запуске) форму 180 ° или 270 ° и написать вершинный шейдер, чтобы свернуть или свернуть форму вокруг центра.

Для простоты смоделируйте свою форму так, чтобы ось цилиндра была Z, центр XY был {0, 0} (Z не имеет значения), отверстие формы было направлено к -X, а форма симметрична вокруг Плоскость Y = 0 Я говорю о локальных координатах объекта, затем вы можете расположить / повернуть модель так, как вы хотите. Вот код вершинного шейдера (не проверен):

float len = length( float2( position.x, position.y ) );
float newAngle = atan2( position.y, position.x ) * rollFactor;
float3 newPosition = float3( len * cos( newAngle ), len * sin( newAngle ), position.z );
output.position = UnityObjectToClipPos( newPosition );

Таким образом, вам нужно всего лишь обновить одну постоянную переменную rollFactor, чтобы преобразовать вашу форму под любым углом. Если начальная форма равна 270 °, установите константу 1.33334, чтобы свернуть ее в полный пончик, 1.0, чтобы она оставалась на 270 °, 0.33333, чтобы скатиться до 90 °, как на скриншоте и т. Д.

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