Выбор из окна OpenGL, скорость, параметры и многое другое? - PullRequest
0 голосов
/ 02 августа 2020

У меня в окне PyOpenGL около 600 сфер. Я использую PyQt для управления своим окном, поэтому для этого использую QGLWidget. Я бы хотел выбрать из этих сфер, но проблема в том, что все они одного цвета металлик c серый. Поэтому я не использую никаких текстур изображений.

На этом этапе я провел некоторое исследование и нашел этот учебник, в котором используется процедура C, и, поскольку я не знаком с этим, это довольно сложно для me.

https://www.lighthouse3d.com/tutorials/opengl-selection-tutorial/

Я хотел бы также упомянуть, что я использовал основной профиль вместо немедленного режима, как в приведенной ниже ссылке.

Использование окна glfw внутри Pyqt Window

Можно ли делать выборку по-прежнему с использованием профиля ядра, поскольку это довольно базовый c? Или мне нужно переключить свой код PyOpenGL в немедленный режим?

1 Ответ

0 голосов
/ 03 августа 2020

Я раньше не использовал QGLWidget, но, просмотрев несколько предоставленных вами вещей и документов, вы, вероятно, захотите:

  1. Убедитесь, что отслеживание мыши включено на gl widget object.
  2. Убедитесь, что у вас есть функция, подключенная к gl widgets. Функция paintEvent
  3. Получите положение мыши
  4. Создайте QVector со всеми объектами в сцене.
  5. Создайте QVectorIterator для итерации по всем объектам в сцене.
  6. Приведение / преобразование каждого из 3D-объектов, положение которого преобразуется в пространство экрана, затем вычисляется добавление дельты к набору (возможно, даже для dict с {delta: qglobject}). Следите за самой низкой дельтой.
  7. Выберите объект с помощью my_objects [low_delta] и выполните свои операции.

Я никогда не использовал это раньше, поэтому могут быть некоторые классы и методы, которые сделают большую часть этого за вас, изучите их. Если вы собираетесь отображать множество объектов на экране, вам может потребоваться какое-то кеширование / запоминание для повышения производительности. Одна вещь, которая может помочь, - это создание dict из отсортированных дельт для каждого объекта из источника / центра gl_widget, а затем использование двоичного поиска для поиска ближайших объектов к позиции вашей мыши.

Проверьте некоторые из них:

https://doc.qt.io/qt-5/qglwidget.html

https://doc.qt.io/qt-5/qglwidget.html#paintEvent

...