2012-01-14 3 views
0

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

+2

Это не проблема OpenGL. Вы используете OpenGL только для рисования. Вам придется писать любые операции над своей геометрией самостоятельно. – Bart

ответ

2

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

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

Я рекомендую использовать путь для определения плоскостей, где идет каждый набор вершин. Путь должен состоять из серии точек и вектора ориентации для каждой точки, который определяет, сколько вращать вокруг вектора направления. При этом вы можете легко вычислить 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)]

Теперь вы сначала вычислите все три вектора ориентации. Нормаль - это разность между текущей и следующей точкой, поэтому (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| 

(I «Вероятно, вы немного поменялись знаками, вам, возможно, придется поменять коэффициенты перекрестного продукта, чтобы получить правильные результаты)

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

1

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

Вы не делаете. OpenGL - это API-интерфейс чертежа, а не библиотека обработки геометрии. Посмотрите на такие библиотеки, как GTS http://gts.sourceforge.net/

Смежные вопросы