OpenGL объект экструзии - PullRequest
       1

OpenGL объект экструзии

0 голосов
/ 14 января 2012

У меня нарисована трехмерная рамка в opengl, может кто-нибудь объяснить, как выдавливать объекты в opengl? я просто перевожу дальше обратно по оси z для каждого поля?

Ответы [ 2 ]

2 голосов
/ 14 января 2012

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

Например, вы не должны рисовать крышки ящиков (пол и потолок) для промежуточных ящиков. Вы также должны убедиться, что стороны соприкасаются идеально, иначе вы получите артефакты.

Я рекомендую использовать путь для определения плоскостей, в которых проходит каждый набор вершин. Траектория должна состоять из ряда точек и вектора ориентации для каждой точки, который определяет, сколько нужно повернуть вокруг вектора направления. При этом вы можете очень легко вычислить 4 вершины кольца, просто используя базовую векторную математику.

Так, например, вы начинаете с заглушки [(0,5,0,5,0), (- 0,5,0,5,0), (- 0,5, -0,5,0), (0,5, -0,5,0)] и переместите его вдоль траектории (первая - центральная точка, вторая - правый вектор) [(0,0,0), (1,0,0)], [(0,5,10), (1,1,0 )], [(10,5,12), (0,1,0)] * +1007 *

Теперь вы сначала рассчитываете все три вектора ориентации. Нормой является разница между текущей и следующей точкой, поэтому (0,5,10) - (0,0,0) = (0,5,10). Правый вектор должен быть спроецирован на плоскость, определяемую нормалью, поэтому мы сначала рассчитываем вектор роста с использованием перекрестного произведения: (0,5,10) x (1,0,0) = (0,10, -5) , И в качестве последнего шага мы рассчитываем спроецированный правый вектор, который является перекрестным произведением между нормой и ростом: (0,5,10) x (-2,4, -2) = (-125,0,0). Все три вектора должны быть нормализованы, и если вы поместите их рядом, вы получите красивую матрицу преобразования, которую вы примените к векторам шапки, получая 4 вершины для текущего шага:

|-1  0        0       |   |0.5|   |-0.5     |
| 0  0.894427 0.447214| * |0.5| = | 0.447213| etc.
| 0 -0.447214 0.894427|   |0  |   | 0.223607|

(я, наверное, немного запутался с признаками, вам, возможно, придется поменять местами факторы для получения правильных результатов)

Затем вы повторяете одну и ту же процедуру для каждого шага на пути и каждый раз рисуете 4 кольца.

1 голос
/ 14 января 2012

как выдавливать объекты в opengl

Нет.OpenGL - это API рисования, а не библиотека обработки геометрии.Посмотрите на библиотеки как GTS http://gts.sourceforge.net/

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