Лучший способ выбрать из большого количества четырехугольников не может быть легко определен.Мне не очень нравятся выбор цвета или подобные методы, потому что они кажутся непрактичными для большинства ситуаций.Я никогда не понимал, почему существует так много учебных пособий, ориентированных на людей, которые являются новичками в OpenGl, или даже на программирование, нацеленных на сбор, который просто бесполезен почти для всего.Например: попробуйте получить пиксель, на который вы щелкнули, в карте высот: невозможно.Попробуйте найти точную сетку в модели, по которой вы щелкнули: Непрактично.
Если у вас большое количество четырехугольников, вам, вероятно, потребуется хорошее пространственное разбиение или, по крайней мере (лучше) граф сцены.Хорошо, вам это не нужно, но это очень помогает.Посмотрите некоторые уроки для графов сцен для получения дополнительной информации. Полезно знать, начинаете ли вы с 3D-программирования, потому что вы знакомитесь со многими концепциями, а не только с кодом OpenGl.
Так что же делать сейчасначать с какой-то комплектации?Возьмите обратную матрицу вашей модели (iirc с glUnproject(...)
) в той позиции, где находится курсор мыши.С ориентацией вашей камеры вы можете теперь направить луч в вашу пространственную структуру (или граф сцены, который содержит пространственную структуру).Теперь проверьте наличие столкновений с вашими квадроциклами.У меня в настоящее время нет ссылки, но если вы ищете обратную матрицу просмотра модели, вы должны найти несколько страниц, которые объясняют это лучше и более подробно, чем это было бы практично сделать здесь.
С помощью этой техники на основе лучевого вещания вы будетев состоянии найти свой квад в O (log n), где n - это количество квадов, которые у вас есть.С некоторой эвристикой, основанной на точной компоновке вашего приложения (ваш вопрос слишком общий, чтобы быть более конкретным), вы можете значительно улучшить его в большинстве случаев.
Простая пространственная структура для этого, например, является квадродеревом.Однако вы должны начать с радиопередачи, чтобы полностью понять эту технику.