Стратегия выбора мыши OpenGL - PullRequest
2 голосов
/ 04 апреля 2011

Я использую OpenGL для рендеринга модели объекта, который является вращательно-симметричным в данной плоскости, и я хочу, чтобы пользователь мог прокручивать модель (возможно, после поворотов, масштабирования и т. Д.) И определитьмировая координата на модели , на которую в данный момент указывает мышь.

Причина, по которой я упомянул симметрию, заключается в том, что я строю модель, используя VBO s отдельных компонентов для простоты использования.По аналогии с тем, что я делаю, было бы велосипедное колесо - у меня было бы одно VBO для спицы, одно для ступицы и одно для колеса / шины, и я бы повторно использовал VBO спицы несколько раз (послеподходящие переводы и повороты).Мой первый вопрос: способствует ли эта договоренность тому виду выбора, который я пытаюсь сделать?Например, я хочу, чтобы каждый выступающий в полученной модели был «выбираемым». Нужно ли отдельное VBO для каждого четырехугольника / треугольника в сетке, чтобы делать выбор, который я пытаюсь сделать? Я действительно надеюсь, что это не так ...

Кроме того, какой алгоритм выбора будет лучше всего использовать?Я ничего не слышал, кроме негативных слов о встроенном режиме выбора OpenGL.Заранее спасибо!

1 Ответ

3 голосов
/ 05 апреля 2011

Что касается вашего вопроса о VBO, нет ничего плохого в том, чтобы иметь несколько VBO и использовать их повторно.Фактически, вы можете иметь все в одном VBO и только индексировать его.По аналогии с велосипедным колесом, за вершинами спиц могут следовать вершины шин, и вы можете нарисовать вершины спиц несколько раз (возможно, даже используя инстансинг, см. glMultiDrawElements), а затем рисовать из того же VBO, но начиная сдругой индекс, шина.

Что касается вашего вопроса о выборе, одним простым способом получения мировой координаты точки на модели под мышью будет считывание значения глубины (glReadPixels на 1x1прямоугольник, желательно с буферным объектом пикселей на данных последнего кадра, чтобы скрыть задержку передачи).Затем позвоните gluUnproject, чтобы получить мировые координаты.

...