Генерация координат для цилиндра - PullRequest
0 голосов
/ 10 апреля 2011

Как я могу сгенерировать координаты для цилиндра, цилиндр состоит из сетки треугольника

Как мне сгенерировать координаты треугольников для составления цилиндра.

Ответы [ 4 ]

3 голосов
/ 10 апреля 2011

Если вам нужен меш, который можно использовать для численного моделирования, это довольно сложная проблема.Если вам просто нужна поверхностная сетка для графики, это довольно просто.Поместите одну вершину в центр каждой круглой грани.Вычислить ряд узлов по краям грани, используя параметрическое уравнение для круга (x = r cos t, y = r sin t).Затем вы делаете кучу длинных узких треугольников, чтобы покрыть концы, используя этот центральный узел и пары краевых узлов.Наконец, представьте себе кучу длинных тощих прямоугольников, обернутых по сторонам цилиндра, определенных одинаковыми узлами;разделите каждый пополам по диагонали, чтобы получилась пара треугольников.

2 голосов
/ 10 апреля 2011

Если мы предполагаем, что вам действительно нужны треугольники с хорошими пропорциями (все стороны пропорциональны друг другу), лучший способ сделать это - следовать последнему предложению EF Hill:

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

У вас будет несколько рядов треугольников по всей длине цилиндра; это не будет только один набор прямоугольников.

Ключ в том, чтобы начать, выбирая, сколько вы хотите по всей окружности. Десять по окружности означает, что каждый из них охватывает 36 градусов по окружности; 20 будет означать каждый охватывает 18 градусов. Получив это, выберите число по длине, чтобы интервал равнялся длине хорды первого измерения. Затем нарежьте по диагонали каждого из них, чтобы получились треугольники.

Верхний и нижний цилиндры облицованы треугольниками путем рисования линий от центра круга, чтобы встретить точки, созданные первым и последним рядами прямоугольников по окружности.

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

0 голосов
/ 11 декабря 2012

Вы можете нарисовать цилиндр процедурно , рассчитав геометрию. Если вы хотите использовать его для рендеринга (в большинстве случаев), вы должны сделать так, чтобы он поддерживал обрезание треугольников , если производительность имеет значение, вы также рассчитываете координаты отображения и, возможно, также и нормали. Так что с нуля нужно немного подумать, но выполнимо, если вы понимаете математику.

Я создал модуль для Unity3D на C #, который делает именно это и позволяет настраивать параметры. Посмотрите видео , чтобы узнать, о чем идет речь, и загрузите код с GitHub .

0 голосов
/ 10 апреля 2011

Начните с наименьшего полицилиндра - представьте треугольник сверху и треугольник снизу, у каждого из которых есть вершины # 1, 2 и 3. Назовите верхний треугольник A и нижний треугольник B. Создайте следующие многоугольники:

  • A1, A2, B1
  • B1, B2, A2
  • A2, A3, B2
  • B2, B3, A2
  • A3, A1, B3
  • B3, B1, A1

Другими словами:

for(int i = 0; i < vertices; i++)
{
   polyList.add(circleVertices1[i], circleVertices1[(i+1) % vertices], circleVertices2[i]);
   polyList.add(circleVertices2[i], circleVertices2[(i+1) % vertices], circleVertices1[(i+1) % vertices]);
}

Это просто с моей головы, но этокажется, имеет смысл.Это не распространяется на круги на концах, но сейчас я предполагаю, что вы можете вычислять круги.

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