3D пример движения над сценой |
Здравствуйте, гость ( Вход | Регистрация )
3D пример движения над сценой |
ltise |
22.2.2013, 18:17
Сообщение
#1
|
Студент Группа: Участник Сообщений: 65 Регистрация: 17.4.2010 Пользователь №: 1636 Спасибо сказали: 0 раз(а) Репутация: 0 |
Привет!
подскажите плиз, может у кого гденить завалялся пример реализации движения камеры над сценой ? неделю уже собираю примеры из разных источников - получается какая-то фигня полная в примерах Qt реализации движения камеры к сожалению нету.... Мне надо сделать-то в одном месте программы визуализацию профиля по grayscale пиксмапу в качестве карты глубин... и забыть Заранее спасибо Сообщение отредактировал ltise - 22.2.2013, 22:39 |
|
|
lanz |
25.2.2013, 9:16
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
А как выглядит класс камеры, как рендеришь сцену из карты глубины?
|
|
|
ltise |
26.2.2013, 16:58
Сообщение
#3
|
Студент Группа: Участник Сообщений: 65 Регистрация: 17.4.2010 Пользователь №: 1636 Спасибо сказали: 0 раз(а) Репутация: 0 |
А как выглядит класс камеры, как рендеришь сцену из карты глубины? Немного изменил пример pbuffer2: Целиком проект тут архив: Не врубаюсь - как настроить источник света, чтобы волна была металлической и смотрелась реалестично (материал - сталь)... Счас вообще непойми что получается.. пробовал по разному...
|
|
|
lanz |
27.2.2013, 9:03
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Ох с чего же начать
1. Раскрывающийся текст
Push и Pop должны идти в разном порядке (см. как работает стек (последний пришел-первый ушел) 2. Сохранение состояния не нужны (по крайней мере сейчас) 3. Всю настройку источников света можно вынести в initializeGL 4. Чуть покрутил коэффициенты, убрал мусор Раскрывающийся текст }5. Что самое главное для освещения? Правильно, нормали Примерно так, неидеально конечно: Раскрывающийся текст
6. Что почитать? http://math.hws.edu/graphicsnotes/c4/s3.html (секция 4.3.4 очень рекомендуется) http://www.glprogramming.com/red/chapter05.html http://devernay.free.fr/cours/opengl/materials.html например. 7. Можно еще покрутить коэффициенты, но чтобы была реалистичная сталь, придется делать отражение (cube map например). Ну или текстуру. Сообщение отредактировал lanz - 27.2.2013, 9:07 |
|
|
ltise |
27.2.2013, 14:10
Сообщение
#5
|
Студент Группа: Участник Сообщений: 65 Регистрация: 17.4.2010 Пользователь №: 1636 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
lanz |
27.2.2013, 14:56
Сообщение
#6
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Нормаль назначается на каждую вершину, это да.
При расчете освещения OpenGL интерполирует нормали с краев полигона (так же как и цвет). Поэтому если расчитывать так как я предложил - получится что то вроде левого рисунка, будут полосы вдоль граней На картинке в правом случае более правильный вариант, получится лучшее сглаживание. Сообщение отредактировал lanz - 27.2.2013, 16:32 |
|
|
ltise |
28.2.2013, 11:08
Сообщение
#7
|
Студент Группа: Участник Сообщений: 65 Регистрация: 17.4.2010 Пользователь №: 1636 Спасибо сказали: 0 раз(а) Репутация: 0 |
lanz,
Вроде все заработало, осталось разобраться с материалами, но это уже не так критично Раскрывающийся текст
|
|
|
lanz |
28.2.2013, 16:14
Сообщение
#8
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Еще несколько мыслей:
1.
Можно не использовать, поскольку QVector3D возвращает уже нормализованный вектор. Будет небольшой прирост производительности. 2. Раскрывающийся текст
Это необязательно делать каждый кадр (все таки лишнее переключение состояний). Можно запихнуть в initializeGL. 3.
Лучше наверное писать QVector3D::normal(...) а то немного запутывает читателя. 4.
Необязательно, т.к. QGLWidget сам свапает, после каждого вызова paintGL (если специально не отключать) 5. Ну и конечно шейдеры и VBO. Надо постепенно переходить на них (они не такие сложные как кажутся! ) , с ffp нормальный материал трудно будет сделать. |
|
|
lanz |
28.2.2013, 16:46
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
6. Насчет вращений, лучше перемещать позицию камеры а не вращать систему координат.
При реализованном вращении будет очень неестественно - (попробуй повернуть сначала по иксу на 180, потом по игреку на 180, потом опять по иксу). Вообще это связано с тем что вращения в OpenGL это не совсем то же самое что эйлеровы углы (после каждого вращения оси перемещаются). Еще используют кватернионы, но я делал проще. Кусок старого кода на шарпе/OpenTK(Qt умеет все то же самое, смотри QMatrix4x4): Раскрывающийся текст ArchX/Y - перемещение по дуге параллельной осям экрана. Раскрывающийся текст
Сообщение отредактировал lanz - 28.2.2013, 16:47 |
|
|
Текстовая версия | Сейчас: 24.4.2024, 14:21 |