|
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 18
|
|
Поиск местонахождения объектов в opengl. Qt07.11.2014, 18:55. Показов 7039. Ответов 58
Метки нет (Все метки)
Доброго времени суток!
Делаю программу в Кьюте, которая строит множество объектов на экране с помощью OpenGL. Эти объекты я одновременно могу масштабировать, изменяя размеры окна с помощью glOrtho(), поворачивать с помощью функции glRotate*(). Проблема заключается в том, что мне нужно при наведении курсора выяснить, на какой объект он был наведён. Не могу понять, как это реализовать. Нужно, чтобы определялась хотя бы координата этого объекта, по которой он строился. Дальше, естественно, легко определить будет, что за объект. То есть нужно, чтобы я навёл курсор, и волшебство мне выдало координаты объекта в x, y, z. Есть у кого какие соображения?
0
|
|
| 07.11.2014, 18:55 | |
|
Ответы с готовыми решениями:
58
Удаление объектов в OpenGL |
| 11.04.2024, 12:04 | ||||||
|
Удивительно то, что touchEvent() не нужен для Android'а, если не нужно отслеживать несколько касаний. В примере выше достаточно одного метода mousePressEvent(), который и так есть для Desktop и WASM, а touchEvent() нужно убрать:
0
|
||||||
| 11.04.2024, 13:26 | |||||||||||||||||
|
Написал очень короткий пример, где выводится простейший треугольник (без model/view/projection матриц) с выводом цвета полученным с помощью glReadPixels. Протестировал пример на реальном смартфоне и на эмуляторе. Записал gif-анимацию с эмулятора. Здесь движно, что когда происходит касание с треугольников, то выводится красный цвет в консоль (1, 0, 0), а если по фону, то выводится серый цвет (0.2, 0.2, 0.2). Важно использовать QWindow::devicePixelRatio(). Это отношение размера физического пикселя к "независимому" размеру пикселя устройства. В документации написано, что:
Важно помнить, что glReadPixels считает, что начало координат в нижнем левом углу, а mousePressEvent - в верхнем левом углу, поэтому по Y координата по Y переворачивается:
Исходники в одном файле: main.cpp
0
|
|||||||||||||||||
| 11.04.2024, 14:48 | |
|
В общем случае команды рисования (glDrawArrays и др) не гарантируют "готовности" пикселей, нужно юзать glFinish/glFlush
Если "вот так все просто" (glReadPixels) - это должно насторожить. Покрутите в уме разные варианты выборки. Напр если примитивов много - нужно дать возможность выбрать их "рамкой" (которую еще надо подсвечивать). Конечно "это уже другая задача", но если Вы заявляете "я умею выбирать.." - ее тоже придется делать. В общем, с упоением рисовать красный треугольник - дело хорошее, но..
0
|
|
| 24.05.2024, 15:04 | ||||||||||||
|
В коротком примере ниже выводится красный треугольник. По клику выводится цвет пикселя в месте клика. В данным момент значение цвета выводится в консоль с задержкой в 5 секунд для glFinish, а если заменить glFinish на glFlush, то задержки нет. Можете скачать пример и потестить: pro
0
|
||||||||||||
| 24.05.2024, 15:26 | ||||||
|
Забыл прикрепить пример выше в архиве. Чтобы появилась задержка в выводе значения цвета в консоль нужно раскомментировать glFinish и закомментировать glFlush перед glReadPixels, вот так:
0
|
||||||
| 25.05.2024, 09:04 | ||
По своему опыту особых задержек glFinish не замечал, не говоря уже о 5 сек, ну это всего лишь "моя машина/карта". Ситуации когда glFinish необходим ("не успело отрисовать") были при массивном рисовании. Если можно прочитать цвет после swapBuffers, то glFinish не нужен. В Вашем примере это решается напр сигналом с QueuedConnection.Ваши примеры так перегибают палку с "простотой" что теряется всякий смысл. Показать glReadPixels - слишком мало, к тому же читать надо не этой ф-цией. Решили выбирать цветом - ладно. Но тогда рендерите в текстуру, кодируйте ID объекта + ID примитива. Заодно освоите геометрические шейдеры. Передрать пример должно быть выгодно/заманчиво, иначе нафиг он нужен
0
|
||
|
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
|
|||
| 27.05.2024, 10:06 | |||
|
1
|
|||
| 27.05.2024, 11:44 | ||||||||
0
|
||||||||
| 27.05.2024, 22:07 | ||||||||||
0
|
||||||||||
|
Модератор
|
|
| 27.05.2024, 22:15 | |
|
По сути ведь не обязательно же ждать завершения рисования. Можно брать значения предыдущих кадров до очистки экрана. Только с 2 буферами задержка будет если не ошибаюсь в 2 кадра, но даже при 30 кадрах это очень мало и не заметно человеческому глазу, а на экране все не успеет кардинально измениться, да и обычно где есть выбор нету ничего динамического.
0
|
|
| 27.05.2024, 22:26 | |||
|
Не по теме: Сейчас опять начнется
0
|
|||
|
Модератор
|
||
| 27.05.2024, 22:44 | ||
|
Я у себя выбор обычно делаю через тест трафарета, тоже glReadPixels, но с GL_STENCIL_INDEX и GL_INT, диапазон сильно меньше чем в цветах, но тоже имеет место быть.
0
|
||
| 27.05.2024, 23:06 | ||||||||
0
|
||||||||
| 27.05.2024, 23:41 | |||
А вот массивное рисование - очень может быть что и нет, в зависимости от объема геометрии и мощности карты. Не стоит терять время на выяснение "а когда же это случится", лучше пресечь сразу.
1
|
|||
|
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
|
|||||
| 28.05.2024, 09:20 | |||||
|
1
|
|||||
| 28.05.2024, 13:27 | ||
|
1
|
||
|
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
|
||
| 28.05.2024, 22:11 | ||
|
8Observer8, glReadPixels читает из текущего glReadBuffer, который по умолчанию
1
|
||
| 29.05.2024, 14:04 | |||
Добавлено через 25 минут ---- Да, и хочу предложить маленькую "викторину" Какие ID надо сохранять в пикcеле?1) ID объекта/модели 2) ID примитива (напр тр-ка) 3) ID ??? Не путать с др данными, напр глубина Z, барицентрик и.т.д., именно номер/ID
0
|
|||
|
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
|
||
| 29.05.2024, 15:16 | ||
|
0
|
||
| 29.05.2024, 15:16 | |
|
Помогаю со студенческими работами здесь
59
OpenGL поворот объектов файлы 3д объектов существуют в OpenGL? Как в OpenGL обнаруживать столкновения объектов Создание теней для объектов в OpenGL Как сделать движение нескольких объектов. OpenGL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|