OpenGL - это не граф сцены (* Гах * Я, устаю, пишу это снова, снова, снова и снова).Он рисует вещи.Вы даете ему кучу треугольников в трехмерном пространстве, и он проецирует их в 2D, рисует их по вашему желанию, а затем забывает об этом.
После того, как вы нарисовали свой куб, в OpenGL больше ничего нетэто идентифицировало бы это как последовательную структуру.Это полностью на вашей части.
Что вам нужно сделать, это:
- сохранить представление сцены, которую вы нарисовали
- установить обработчик событий мыши в области GTK GL
- Используйте события мыши для преобразования координат обратного указателя в координаты сцены.По сути, вы будете «стрелять» лучами в сцену и проверять, где они попали.К счастью, проверка пересечения луча с кубом тривиальна.Вы можете немного ускорить процесс, сначала проверив, приблизился ли луч к лучу, используя тест на ограничивающую лучи сферу.
Следующие ключевые слова: «Выбор объекта OpenGL»
, чтобы его можно было выбирать для перетаскивания
Кстати: вы не можете просто перетаскивать «объекты» в OpenGL, потому что он не знает об «объектах»,в смысле геометрических структур.OpenGL определяет объекты, но это фактически абстрагированные источники данных, такие как текстуры или буферы вершинных и индексных данных.Ничего, что могло бы создать сцену, которой можно манипулировать.
Если вы измените что-то в сцене, с OpenGL вам придется полностью перерисовать это.