Рисуване на множество свързани обекти в 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