У меня есть простое приложение для моделирования твердого тела, в котором я хочу реализовать несколько «режимов навигации», которые позволяют пользователю перемещаться по камере через трехмерное пространство. Одним из них является повсеместное «перетаскивание / вращение», которое используется в SketchUp, Blender и т. Д .; Я также хочу реализовать что-то более подходящее для моего конкретного приложения. В частности, я хочу реализовать режим, в котором камера плавает на «кольце» над моделируемым объектом (зданием) и всегда смотрит в центр модели; таким образом, пользователь может легко «обвести» вокруг объекта, что является обычной операцией в моем приложении.
Итак, я хочу визуализировать здание в моем представлении и отобразить тор в правом верхнем углу представления с небольшой сферой на торе, обозначающей местоположение камеры. В торе будет стрелка севера, и пользователь будет перетаскивать камеру вокруг объекта модели, перетаскивая сферу; перемещение сферы приведет к перестановке камеры и перерисовке сцены.
Похоже, что я должен сделать следующее: сделать «основной вид», то есть здание; затем визуализируем тор и сферу (с различными настройками перспективы и освещением) в заэкранный буфер и перетаскиваем его оттуда в мой основной вид.
Тогда я доберусь до проверки удара. Я хочу определить, нажимает ли пользователь на сферу или тор; Исходя из того, что я понимаю из выбора OpenGL (кажется, это сложный вопрос: /), все методы выбора применяются только для выбора в одной «сцене». Кроме того, я все еще хочу обнаружить «нормальные» операции комплектования в модели здания, очевидно.
Итак, мои вопросы:
- Как выполнить рендеринг в буфер за пределами экрана и перейти в другой контекст OpenGL (с альфа-смешиванием и прозрачностью, как для центра тора)?
- Как мне выполнить проверку попадания в описанном сценарии?