Odin P. Morgan
При чём тут GI к скринспейсовым теням?
Я теоретически могу написать урок по instant radiosity, но не факт что у меня будет достаточно времени для этого.
bazhenovc
вообще урок мне нужен только для того, чтобы понять прявильно я делаю или можно сделать быстрее и проще. С SS у меня просто другая задумка.
Если можно такой урок: Sherical & Cylindrical Projection Camera Shader.
Вопрос совместимости версий.
То есть согласно этой статье: http://usefulbytes.blogspot.ru/2009/04/opengl-3.html
в OGL 3 нет glVertex, glNormal и т.д. А так же стандартных матриц. И всё это теперь надо рассчитывать в самом приложении.
А почему бы не показать как? Например, в Рендермонке есть стандартный набор "подключаемых" переменных: position, texcoord, normal, tangent, binormal и т.д. + стандартные матрицы?
Например, тут пишут, что есть короткий вариант рассчёта тангента: http://stackoverflow.com/questions/5255806/how-to-calculate-tange… -and-binormal
(правда есть (при каких условиях) или всё же нет?)
А тут единственное место, которое удалось найти с примером рассчёта тангента (и всей TBN): http://3d-orange.com.ua/best-calculation-of-tbn/
Почему бы в какой либо статье не показать как это всё рассчитывать вне шейдера, на основе OGL (какие матрицы где брать, в какой последовательности пермножать), в приложении, как в шейдер OGL 3 теперь передавать?
+ Как при этом создать минимальную совместимость со старыми версиями. Чтобы код шейдеров к старым версиям работал в новых, или работал с минимальными изменениями (там, с glVertex на gl_Vertex или вообще без изменений).
А то даже в Рендермонке все примеры пока только к версиям OGL младше 3, получается.
И ещё было бы интересно по подробнее как будет осуществляться перход с 2 на 3 версию? Например, как тестировать 3 версию, если у тебя, к пример Win-ХРюша? Надо ли что-то доп-но ставить, где это брать и т.д.? Каких принципов при программировании на старых версиях нужно придерживаться (список правил или принципов + необх. элементов при соблюдении/использовании которых совместимость сохранится), чтобы не возникло пробелем с переносом на старых ш. новые иил новых на старые?
Kukuy
>в OGL 3 нет glVertex, glNormal и т.д. А так же стандартных матриц. И всё это теперь надо рассчитывать в самом приложении. А почему бы не показать как?
Все показано в уроках.
>Почему бы в какой либо статье не показать как это всё рассчитывать вне шейдера, на основе OGL (какие матрицы где брать, в какой последовательности пермножать), в приложении, как в шейдер OGL 3 теперь передавать?
TBN обычно рассчитывается в программе где делается normal map, потому что там есть вся информация для этого, восстанавливать TBN из одной только normal map уже в программе - можно, но не в общем случае, как минимум надо знать алгоритм по которому строилась normal map и еще не всегда получается точно такой результат как ожидаешь, но можно попробовать получить достаточно близкий. Есть в транке уроков небольшой пример (без описания) тут https://code.google.com/p/gl33lessons/source/browse/branches/bumpmapping/ (на название не смотри - код про normalmapping).
Ну и какое это имеет отношение к OpenGL? OpenGL для обработки данных и вывода их на экран, дальше все зависит от вашей фантазии. OpenGL про TBN ничего не знает, также как и про GI, другое дело что в нем есть способы это делать, а для некоторых популярных фишек даже встроенные возможности (shadowmapping например), но это скорее исключение из правил, все таки это GAPI, а не фреймворк какой-то.
>Например, в Рендермонке есть стандартный набор "подключаемых" переменных: position, texcoord, normal, tangent, binormal и т.д. + стандартные матрицы?
В версиях OpenGL 3+ это все лежит на программисте, в уроках как раз упор идет на передачу подобных параметров с использованием location, что позволяет унифицировать этот пример. В версии OpenGL 4+ пошли еще дальше, смотрите например примеры от g-truc http://www.g-truc.net/project-0026.html
>Как при этом создать минимальную совместимость со старыми версиями. Чтобы код шейдеров к старым версиям работал в новых, или работал с минимальными изменениями
Писать старый код, очевидно, в новых версиях не выпилили совместимость :)
>И ещё было бы интересно по подробнее как будет осуществляться перход с 2 на 3 версию?
Это весьма подробно описано как раз, читайте.
>Например, как тестировать 3 версию, если у тебя, к пример Win-ХРюша?
OpenGL это вам не DX, если есть поддержка в драйверах - хоть в Win95, все зависит только от драйвера.
>чтобы не возникло пробелем с переносом на старых ш. новые иил новых на старые
Опять же - пишите "старый" код и все норм.
KpeHDeJIb
- То бишь надо или новую видеокарту покупать или дрова на старую обновлять.
- А для получения двунаправленной совместимости лучше писать код по старому.
Тут ещё момент, что в VC++ 2005 по моему небыло ни windows.h ни заголовков OGL, всё это надо было качать и ставить отдельно (platform SDK, потом оказалось, что её переименовали в win SDK, потом оказалось, что она весит под 2 гб и т.д.) Поэтому опасения, что опять какие-нибудь новые заголовки (или ещё что-то) появятся, а где их взять никого не предупредят.
> Ну и какое это имеет отношение к OpenGL?
Допустим тангенты не имеют. А нормали? Ведь glNormal вроде как убрали. И glVertex. Значит? Что предполагается? Что их надо брать/рассчитывать где-то вовне, а потом передавать в шейдер? А если их надо, то почему бы и тангент не рассчитать "для полного комплекта" сущностей одного порядка (тем более, что бинормаль = cross (n, t); )
Такой ход мылей.
+ Глянул тут: http://www.gamedev.ru/community/ogl/articles/lesson02
Часть вопросов сняло. Ввиду отсутствия в Win заголовков OGL для версий старше OGL 1.1 используется динамическая загрузка библиотечных функций. Там же ссылка на *.h
Тогда примерно понятно. Тогда легко можно определить существует ли такая ф-ция в библиотеке. И если не существует, то использовать из младших версий.
Уроки хорошие.
Kukuy
>Допустим тангенты не имеют. А нормали? Ведь glNormal вроде как убрали. И glVertex. Значит? Что предполагается? Что их надо брать/рассчитывать где-то вовне, а потом передавать в шейдер?
Именно так, надо эти данные брать откуда-то и передавать в PPL. Можно их генерировать, можно загружать из файла, как вам угодно.
Кстати в ogl 4.4 и 4.5 совместимость с более ранними версиями вернули?
Odin P. Morgan
> Кстати в ogl 4.4 и 4.5 совместимость с более ранними версиями вернули?
Ты про что?
такой вот вопрос...
скажем так... я щас реализовываю нечто вроде hello world
использующего OpenGL
суть затеи добиться максимальной кросс платформенности
планируется сделать так что бы оно запускалось как минимум на
Linux + OpenGL
Linux + Mesa OpenGL ES
Windows + OpenGL
Windows + ANGLE
Android + OpenGL ES
nacl + WebGL
asm.js + WebGL
в конечно итоге можно будет проверить и на маках и на яблофонах, но у меня оных нет
подобная кросс платформенность накладывает разумеется некоторые ограничения
т.е. основное целевое API OpenGL ES 2
ну и с некоторыми обвязками обеспечивается совместимость с OpenGL 2.1
все это реализовывается используя в основном лишь голый OpenGL
и кросс платформенный glfw
в качестве компилятора использую clang и использую фичи стандарта С++14 (наверняка будут проблемы с со сборкой под nacl и android но я думаю они решаемые)
в качестве основной IDE используется Clion
для тестирования на Android будет использоваться Android Studio
разработка ведется в Linux, но для тестирования в Windows буду собирать и ANGLE в том числе
собственно в чем вопрос, есть ли смысл оформлять решения всех проблем с которыми сталкиваюсь в форме каких либо статей или уроков?
по своему содержанию, стать и будут чем то походить на содержание уроков кренделя,
но больший акцент будет делать именно на проблемы совместимости
и настройку средств разработки
либо не маяться фигней, и в лудшем случае по итогу кинуть ссылку на репозиторий по окончанию затеи?
если все таки есть смысл заморачиваться с уроками,
то может быть все таки стоит использовать что нить более приближенное к народу, а не C++14?
пока по факту там получается много шаблонов вывода типов и прочей магии...
основной код получается пока каким то таким
но не проблема переписать в более классическом стиле, даж на Си
cNoNim
> собственно в чем вопрос, есть ли смысл оформлять решения всех проблем с
> которыми сталкиваюсь в форме каких либо статей или уроков?
Для тех кто шарит хватит и репозитория, а те кто не шарят врятли станут что-то такое делать, так что не трать свое время на уроки, но простую статью с описанием проблем и решений можно и написать.
Так как code.google в недалёком будущем откинется, что меня расстраивает, неплохо было бы перенести файлы в другое место.
Elun
Уроки я перенесу в самое ближайшее время, на битбакет скорее всего, я еще подумаю.
Попробовал экспортнуть на гитхаб https://github.com/ud1/gl33lessons
Код экспортнулся вроде, вики не вижу.
cNoNim
> собственно в чем вопрос, есть ли смысл оформлять решения всех проблем с
> которыми сталкиваюсь в форме каких либо статей или уроков?
Очень интересно. Сам хочу сделать что-то подобное, но за нижнюю планку выбрал GLES 3.0. У меня движок интенсивно использует фичи GL 3.x, которые работать на GLES 2.0 не будут и которые невозможно переделать на GLES 2.0 с сохранением гибкости.
Я думаю, мне было бы достаточно описать, что где лежит и какую проблему решает. Если какая-то проблема не очень очевидна, то лучше описать поподробнее. А уроки для нубов не нужны, потому что, как уже писали здесь, нубы за такое и не возьмутся.
cNoNim
> то может быть все таки стоит использовать что нить более приближенное к народу,
> а не C++14?
> пока по факту там получается много шаблонов вывода типов и прочей магии...
Я думаю, сойдёт. Если совсем запутанные шаблоны с вариадиками, то лучше объяснить, что там происходит, хотя бы в комментариях.
Это по поводу кода. А вот насчёт использования разных IDE для разных платформ, особенно Android, компиляции версии для WebGL, желательно поподробней расписать.
cNoNim
> наверняка будут проблемы с со сборкой под nacl и android но я думаю они
> решаемые
Под Android вроде есть G++ 4.9 и последний Clang, так что вряд ли будут проблемы.
Тема в архиве.