Russian Qt Forum
Ноябрь 22, 2024, 10:58
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Разное
>
Говорилка
>
Геометрия (задачки)
Страниц:
1
...
3
4
[
5
]
6
7
...
24
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Геометрия (задачки) (Прочитано 226093 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Геометрия (задачки)
«
Ответ #60 :
Сентябрь 16, 2014, 07:11 »
Цитата: __Heaven__ от Сентябрь 15, 2014, 13:13
Цитата: Igors от Сентябрь 15, 2014, 11:30
Из того что Вы рассказали я понял что матрица GL_MODELVIEW никакого отношения к масштабу и пикселям не имеет.
Имеет.
...
Я может быть ошибаюсь, но к пикселям имеет отношение почти всё, ...
Разумеется любые изменения GL_MODELVIEW повлияют на результат. Но различные вызовы glOrtho никак не изменяют эту матрицу. Поэтому практичнее для операций pan/zoom вообще ее не трогать а просто управлять пр-ком подаваемым в glOrtho
Реализация в аттаче. Если выбран вертекс то он центр масштаба, иначе относительно текущего положения мыши. Замечания:
- для простоты принимается bounding box [-0.5..0.5], по-взрослому он должен вычисляться на основании модели и иметь любые размеры/центр
- выбор вертекса предполагает единичные матрицы OpenGL иначе не будет работать корректно. Ну и вообще перебор всех - не подход.
- возможно более правильно (или технично) использовать gluProject/gluunProject вместо самопальных переводов
Ну в конце-концов это просто пример
«
Последнее редактирование: Сентябрь 16, 2014, 07:13 от Igors
»
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #61 :
Сентябрь 16, 2014, 07:27 »
Посмотрел - очень интересно. Но, пока я на тачпаде - выглядит забавно. Разберу код чуть позже.
Вот ещё момент вчера решил. Как будем таскать объект по экрану с помощью ПКМ?
При отпускании мыши она должна указывать на ту же точку геометрии, что и при нажатии. Я это уже решил, но интересно мнение форумчан
P.S.: в своем проекте я выполняю pan за счет трансляции в начале рисования, то есть с помощью ModelView. И это удобно
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Геометрия (задачки)
«
Ответ #62 :
Сентябрь 16, 2014, 07:37 »
Цитата: __Heaven__ от Сентябрь 16, 2014, 07:27
Как будем таскать объект по экрану с помощью ПКМ?
Такая аббревиатура мне неизвестна
Зависит от смысла "таскания". Если имеется ввиду реальное перемещение объекта - то однозначно GL_PROJECTION. Если же меняется view (pan, т.е. скролл окна) то так же как в примере выше.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #63 :
Сентябрь 16, 2014, 07:57 »
ПКМ - правая кнопка мыши.
Да, забыл упомянуть, я задачки решаю на ортопроекции.
Тут еще пришло в голову:
destVertex = project * someMatrixOperations * ModelView * sourceVertex.
someMatrixOperations - некие операции трансляции, поворота и масштаба, представлены в виде перемножения различных матриц и очень редко изменяются пользоватлем, или даже вообще не изменяются, например это перенос центра исходной геометрии в центр "экрана", поворот на 100500 градусов вокруг осей и масштабирование в 2 раза, то есть так сказать положение, от которого начинаем плясать. Также нам известно, что projection тоже редко меняется, а ModelView перестраивается на каждом кадре.
Так вот, чтобы сэкономить на операциях предлагаю такой вариант решения задачи:
В матрицу project запишем результат project * someMatrixOperations. Таким образом эта матрица будет хранить не только правила проецирования геометрии, но также и её преднастройку. А матрицу ModelView мы можем вертеть как хочешь.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Геометрия (задачки)
«
Ответ #64 :
Сентябрь 16, 2014, 08:06 »
Цитата: __Heaven__ от Сентябрь 16, 2014, 07:57
предлагаю такой вариант решения задачи:
Я один из немногих активно обсуждающих, но поверьте - даже мне неясно о какой задаче Вы говорите?
Так часто бывает с автором - ведь у него задача всегда в голове, он думает и у других тоже.
Предлагаю сделать отдельную тему, напр "Создаем OpenGL Viewer с нуля" - и там уже развернуться по полной, со всеми подробностями.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #65 :
Сентябрь 16, 2014, 08:27 »
ок, ещё раз
Задача - отрисовать геометрию на экране с учётом всех преобразований.
Для этого требуется к каждой вершине sourceVertex применить ряд операций, то есть projection и modelview, как мы привыкли.
Но вот мы знаем, что каждый раз выводя геометрию на экран нам необходимо предварительно сделать ряд однообразных превращений modelview. Пускай это будет перемещение в центр области построения геометрический центр (центр масс) детали (она у нас одна). На протяжении работы с деталью геометрический центр остаётся неизменным. То есть у нас получается, что мы каждый раз при прорисовке детали делаем одну и ту же операцию.
Так вот, я предлагаю эту операцию отдать под ответственность матрицы proj. Она меняется редко. Обычно в случае изменения размеров окна. Таким образом получается, что мы на каждом кадре экономим 1 операцию.
Цитата: Igors от Сентябрь 16, 2014, 07:37
Если имеется ввиду реальное перемещение объекта - то однозначно GL_PROJECTION. Если же меняется view (pan, т.е. скролл окна) то так же как в примере выше.
Не важно, каким образом происходит перемещение (но необходим оптимальный). Важно, чтобы на экране пользователя объект был перемещён из точки А в точку Б.
То есть интересно как мы пиксели будем переводить в координаты и производить само перетаскивание каким либо из методов.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Геометрия (задачки)
«
Ответ #66 :
Сентябрь 16, 2014, 09:06 »
Цитата: __Heaven__ от Сентябрь 16, 2014, 08:27
Но вот мы знаем, что каждый раз выводя геометрию на экран нам необходимо предварительно сделать ряд однообразных превращений modelview. Пускай это будет перемещение в центр области построения геометрический центр (центр масс) детали (она у нас одна). На протяжении работы с деталью геометрический центр остаётся неизменным. То есть у нас получается, что мы каждый раз при прорисовке детали делаем одну и ту же операцию.
В изометрии есть обязательная операция Fit (вписать) которая гарантирует что все объекты будут полностью видимы. Ее тоже лучше делать не трогая никакие матрицы как в примере выше (см resizeGL). Конечно можно все сделать в одной (любой) матрице, но потом с ней будет неудобно работать. Стандартные роли:
GL_PROJECTION - отражает реальные движения объекта
GL_MODELVIEW - поворот камеры
glOrtho - отвечает за pan/zoom
Все удобно, зачем искать приключений?
Цитата: __Heaven__ от Сентябрь 16, 2014, 08:27
(она у нас одна).
Заявления типа "у меня одна (и только одна) модель!", "у меня нет (и не будет) источников света!" показывают, мягко говоря, "недостаток опыта" и капитально отбивают охоту Вам отвечать.
И еще: пожалуйста создайте новую тему, там продолжим. А этот топик я создавал для др целей и больше отвечать Вам здесь НЕ буду. Спасибо за понимание.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Геометрия (задачки)
«
Ответ #67 :
Ноябрь 07, 2014, 15:32 »
#8) Солнечный свет - он параллельный или как? Параллельны ли "солнечные лучи"?. Чему (какой модели) соответствует солнечный свет в CG? (CG = computer graphics). А в (долбаном) OpenGL? Насколько бесспорно это соответствие?
Данные: радиус Солнца 695,800 km, радиус Земли ~6,400 km, расстояние ~150e+6 km
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #68 :
Ноябрь 10, 2014, 12:46 »
Цитата: Igors от Ноябрь 07, 2014, 15:32
Солнечный свет - он параллельный или как? Параллельны ли "солнечные лучи"?.
Мне кажется, смотря как посмотреть. Естественно лучики солнечного света испускаются со сферической поверхности (и не обязательно перпендикулярно к ней).
Думаю, что можно пренебречь тем, что лучи испускаются и они не параллельны. С земли видно, что они якобы обладают некой параллельностью (можно высчитать угол между двумя лучами солнца и увидеть его незначительность).
Цитата: Igors от Ноябрь 07, 2014, 15:32
Чему (какой модели) соответствует солнечный свет в CG? (CG = computer graphics). А в (долбаном) OpenGL?
Про CG = computer graphics не слышал. Слышал про C for Graphics. Он стал прародителем GLSL (что является частью OpenGL).
Если вы имели в виду этот Cg, то я находил несколько моделей на GLSL в книжке Алексея Борескова "Разработка и отладка шейдеров".
Не скажу, что там модели именно для 100% имитации солнца, но что-то на них сделать можно. Советую посмотреть откомпилированные примеры. По моему, там были и примеры на Cg.
В OpenGL 1.x можно попробовать написать некую приблуду, которая позволит оперативно расставлять источники света и регулировать их показатели отражаемости, диффузии и окружающей освещенности. Ну и чтобы она свойства освещаемого материала могла крутить оперативно. Далее тупой подбор.
Цитата: Igors от Ноябрь 07, 2014, 15:32
Насколько бесспорно это соответствие?
Всегда будет спорно. Это же модель, значит учитывает не все аспекты физики.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Геометрия (задачки)
«
Ответ #69 :
Ноябрь 10, 2014, 12:58 »
Цитата: __Heaven__ от Ноябрь 10, 2014, 12:46
Если вы имели в виду этот Cg,
Не имел, это 2 разные аббревиатуры
Цитата: __Heaven__ от Ноябрь 10, 2014, 12:46
Мне кажется, смотря как посмотреть. Естественно лучики солнечного света испускаются со сферической поверхности (и не обязательно перпендикулярно к ней).
Думаю, что можно пренебречь тем, что лучи испускаются и они не параллельны. С земли видно, что они якобы обладают некой параллельностью (можно высчитать угол между двумя лучами солнца и увидеть его незначительность).
Хмм.. ну вот я дернул фотку наугад (аттач), вроде очень даже значительно
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Геометрия (задачки)
«
Ответ #70 :
Ноябрь 10, 2014, 13:17 »
Цитировать
Хмм.. ну вот я дернул фотку наугад (аттач), вроде очень даже значительно
У меня тож задачка:
Если вечером, прогуливаясь, сильно прищурившись посмотреть на свет от дальних фонарей, то свет от них мы будем видеть в виде вертикальных светлых полос.. Почему так?)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #71 :
Ноябрь 10, 2014, 13:17 »
Ну, я не особо наблюдательный и в реальной жизни таких рассветов не видал.
Предположим, что есть материальная точка в виде солнца. Расстояние до земли составляет 149.6E9 метров. Предположим, что протяжённость горы, изображенной на фото 200км. Значит от середины горы (за которой и располагается материальная точка) до края горы будет 100Е3 метров.
Подсчитаем угол между лучом по середине и крайним лучом.
alpha = atan(100E3 / 149.6E9) = 3.829931785633275e-005 градуса
На фото мы видим явно завышенный угол. Значит:
1) фотография - фэйк
2) за горой стоит здоровенный отражательный прибор
3) я в чём-то ошибаюсь
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #72 :
Ноябрь 10, 2014, 13:18 »
Цитата: m_ax от Ноябрь 10, 2014, 13:17
У меня тож задачка:
Если вечером, прогуливаясь, сильно прищурившись посмотреть на свет от дальних фонарей, то свет от них мы будем видеть в виде вертикальных светлых полос.. Почему так?)
Свет огибает ресницы
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Геометрия (задачки)
«
Ответ #73 :
Ноябрь 10, 2014, 13:19 »
Цитата: __Heaven__ от Ноябрь 10, 2014, 13:18
Цитата: m_ax от Ноябрь 10, 2014, 13:17
У меня тож задачка:
Если вечером, прогуливаясь, сильно прищурившись посмотреть на свет от дальних фонарей, то свет от них мы будем видеть в виде вертикальных светлых полос.. Почему так?)
Свет огибает ресницы
Нет) Для чистоты эксперимента можно выщипать ресницы) Эффект только усилиться)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Геометрия (задачки)
«
Ответ #74 :
Ноябрь 10, 2014, 13:22 »
Цитата: m_ax от Ноябрь 10, 2014, 13:19
Цитата: __Heaven__ от Ноябрь 10, 2014, 13:18
Цитата: m_ax от Ноябрь 10, 2014, 13:17
У меня тож задачка:
Если вечером, прогуливаясь, сильно прищурившись посмотреть на свет от дальних фонарей, то свет от них мы будем видеть в виде вертикальных светлых полос.. Почему так?)
Свет огибает ресницы
Нет) Для чистоты эксперимента можно выщипать ресницы) Эффект только усилиться)
Боюсь спросить, откуда вы знаете
Но если начать наклонять голову от плеча к плечу, то полосы начнут поворачиваться вместе с головой. То есть вертикальность относительно земли пропадёт.
Записан
Страниц:
1
...
3
4
[
5
]
6
7
...
24
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...