OpenGL - рисовать неплоский трехмерный многоугольник, состоящий из набора точек - PullRequest
0 голосов
/ 09 октября 2018

У меня есть набор точек, которые образуют фигуру (в частности, половину трубы, другие похожие фигуры).Мне нужен способ нарисовать эту цилиндрическую грань.

Например:

enter image description here

Я хочу нарисовать эту половину трубы, иУ меня есть отмеченные точки, упорядоченные (нарисованные в виде красных кружков).

Приближение Цилиндра (с линейными краями, а не точно круглыми) - Прекрасно.

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

(я использую PyOpenGL, но это не имеет значения)

1 Ответ

0 голосов
/ 19 октября 2018

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

Каждая модель состоит из треугольников, один треугольник - это 3 произвольные вершины в пространстве.

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

Затем перейдите в каркасный или точечный вид, и вы увидите, что вы на самом деле построили.Только не забудьте сначала правильно выполнить триангуляцию (blender может сделать это автоматически, если по какой-то причине вы использовали квадроциклы).

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

Ну, нет способа избежать этого, вы должны прочитать и выучить: https://learnopengl.com/

Но я могу подвести итог для вас:

  1. Получить данные модели - в этом случае, если вы хотите, чтобы это выглядело так, как вы нам показали, вершин и треугольников будет достаточно;
  2. Загрузите данные вершин и свяжите их с VAO, а также свяжите ваши треугольники(индексы, числа, которые определяют порядок вершин в данных VAO) в EBO. Значения здесь .
  3. Теперь вы строите матрицы, такие как проекционная матрица, которые будут использоваться для правильного преобразования вершин, чтобы он выглядел как правильный трехмерный объект, вращается так, как вы хотитеи т. д .;
  4. Вы визуализируете данные EBO с помощью glDrawElements ();

Да, это не должно быть понятно, но вы узнаете, как это сделать, как выПройдите этот урок.

Что касается того, как получить данные фактической половины трубы ... Вам нужно взять формулу круга, выбрать нужную дугу, скажем, PI * 2 / 3, или, другими словами, третьокружность, разделите эту дугу на N частей, а затем в каждом сегменте вы создаете плоскость, обращенную наружу от круга, плоскость состоит из 2 треугольников каждый (визуально сделайте 2 треугольника, образующих прямоугольник), в конце концов, выВы получите желаемый результат.

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

...