Ловишь события инпута (это к opengl отношения не имеет и делается через то API которым ты создаёшь окно, т.е. X11, SDL, glfw, Qt, GTK, или что у тебя там), берёшь из них координаты, преобразуешь их в свои фигуры и рисуешь.
то есть надо сделать алгоритм который будет добавлять фигуры в код(не в сам код), а например добавляться в вектор фигур по нажатию кнопки добавить и уже отрисовывать, а саму фигуру(вне зависимости от ее сложности и их количества) и текстур в ней экспортировать в файл отдельно?
Рисуешь в каком-нибудь блендере/майе/компасе/любом другом готовом и серьёзном 3D редакторе, экспортируешь в какой-то формат (если у тебя простой случай без скелетки, то это OBJ/STL в простейшем случае даже не бинарный, не забудь ещё отдельно материалы экспортировать, я давно это делал, забыл формат какой, но он тоже текстовый), если надо экспортируешь ещё и UV текстуры + прочие нужные штуки. А в своей программе пилишь импорт всего этого в виде загрузчика готовых моделек. Так намного проще. Есть ещё варианты с xml-подобными форматами файлов, вские COLLADA и иже с ними.
90% программ такие :) Хочешь просветлиться — возьми опенсорцов и покури. Там может быть навернуто скрывающего суть бойлерплейта, макросов или состоять из огромного свича на 100500 экранов, и прочего гуано чтоб приходилось «разбираться в чужом коде», но... это все эквифаллично.
Да там функций слишком много мне столько не надо, с другой стороны изобретать свой велосипед - глупая и недальновидная идея.
Wings3d не подойдёт? Там всё через контекстное меню делается. В линуксе работает нативно, исходники есть.
Под винду из простого есть SketchUp, некоторые эстеты его под вайном запускают. :) Вот он — да, из совсем простого, а-ля пейнт3д, если есть энергия и желание — можешь потыкать и написать кроссплатформенный аналог.