Рисование нескольких связанных объектов в OpenGL

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

На данный момент мне удалось нарисовать руку статически, применив необходимые преобразования, а именно. перевод, вращение, масштабирование и т. д.

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

Пример: - Если пользователь двигает рукой, запястье, ладонь и пальцы должны двигаться, но не плечо. Точно так же, если ладонь выбрана и вращается вокруг запястья, только пальцы, прикрепленные к этой ладони, могут двигаться вместе с ладонью, но не рука или запястье.

Какому шаблону проектирования я должен следовать в своем коде, чтобы достичь этого чисто?


person Anand    schedule 14.10.2011    source источник


Ответы (3)


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

Посмотрите в конец этой главы (советую прочитать ее целиком):

http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html

person datenwolf    schedule 15.10.2011

Я не специалист, но я думаю, вам следует рассмотреть возможность использования набора инструментов поверх OpenGL. Может быть, что-то вроде OpenSceneGraph ( http://www.openscenegraph.org/projects/osg/wiki/About/Introduction )

Ознакомьтесь с введением в него здесь: http://www.artoolworks.com/support/library/An_Introduction_to_OpenSceneGraph_and_osgART

В нем объясняется, что вы можете строить «деревья объектов», которые будут связаны между собой.

person Pascal T.    schedule 14.10.2011

Я сам с ними не работал, но знаю, что OpenGL отслеживает матрицы преобразования в стеке.

Казалось бы, это позволяет вам вставлять одну матрицу преобразования для рисования родительских объектов (скажем, плеча), а затем последовательно вталкивать и извлекать матрицы преобразования для каждого дочернего объекта руки, используя иерархическую взаимосвязь его компонентов. Преобразования применяются последовательно для каждой матрицы, которая в настоящее время находится в стеке, поэтому вам нужно применить преобразование для каждого родительского объекта только один раз, а затем все дочерние элементы будут отрисованы относительно его положения.

Посетите эту страницу для более подробной информации (я сам ее не читал!):

http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html

Это помогает? Это кажется применимым для простых случаев, подобных тому, что вы описываете. Для более сложных приложений Паскаль Т. прав в том, что вы можете захотеть посмотреть на слои поверх OpenGL.

person mdunsmuir    schedule 14.10.2011