алгоритм цилиндра - PullRequest
       1

алгоритм цилиндра

0 голосов
/ 06 ноября 2011

Я пытаюсь нарисовать цилиндр в OpenGl.Я нашел этот алгоритм, но не могу понять его.

http://paulbourke.net/miscellaneous/sphere_cylinder/

"Учитывая два перпендикулярных вектора A и B, можно создать вершины вокруг каждого обода цилиндра.Таким образом, для фасета с 4 вершинами вершины могут быть заданы следующим образом, где theta2 - theta1 - это некоторый достаточно малый угол, который определяет шероховатость аппроксимации.Я использую GLM.может GLM рассчитать кросс-произведение?

Ответы [ 4 ]

2 голосов
/ 06 ноября 2011

A и B образуют основу ортогональной (предварительно ортонормированной) декартовой 2D системы координат.Думайте о них как о осях X и Y.Напомним, что параметрическое уравнение для круга:

p(t) = r (X cos(t) + Y sin(t))

Теперь замените X и Y на A, B, и вы получили уравнение для круглого сечения цилиндра.Чтобы сделать его цилиндром, вы выдавливаете вектором, перпендикулярным к A и B, т.е. C = A × B

p(s, t) = s * C + r (A cos(t) + B sin(t))
1 голос
/ 06 ноября 2011

Есть ответ на несколько строк вверху:

Существует несколько способов создания этих двух векторов, обычно они требуют формирования любого вектора, не коллинеарного относительно оси цилиндра.Перекрестное произведение этого вектора с осью цилиндра (P2-P1) дает один из векторов (скажем, A), взятие перекрестного произведения этого нового вектора с осью дает другой вектор (B).Затем эти два перпендикулярных вектора нормализуются.

Итак, давайте пошагово пошагово:

  1. Создайте любой неколлинеарный вектор с осью цилиндра.
  2. Найдите перекрестное произведение этого вектора с осью цилиндра.Результатом перекрестного произведения является вектор, называемый вектором А.
  3. Нахождение перекрестного произведения вектора А с осью цилиндра приводит к вектору B
  4. Нормализовать векторы A и B

Подробнее о перекрестном продукте вы можете прочитать здесь

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

Я создал модуль для Unity3D на C #, который процедурно создает цилиндр и позволяет настраивать его параметры. Вы должны быть в состоянии легко конвертировать в C ++, так как расчет геометрии везде одинаков, и я хотел бы думать, что код легко понять :) Посмотрите видео , чтобы увидеть, о чем оно, и скачайте код от GitHub .

0 голосов
/ 06 ноября 2011

Да, glm может создавать матрицы разных продуктов, см. GLM API (glm::gtx::matrix_cross_product::matrixCross3 и glm::gtx::matrix_cross_product::matrixCross4).

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