Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Неправильное отображение Bump Mapping


Автор: Vetos 26.4.2015, 01:02
Здравствуйте уважаемые программисты!
        В сети существует множество уроков про Bump Mapping, и во всех уроках теория вроде бы одна, но реализации разные. Хоть убейте, но вникнуть в математику этого процесса для меня проблематично, особо в математике не силен, но программный подход мне понятен, в принципе ничего сложного, если бы в сети не было кучи вариантов исполнения. Я использую связку Qt 5.4 + OpenGL 3.3. Немного оформив все функции в классы, я переработал урок или если быть точнее туториал http://ogltutor.netau.net/tutorials/tutorial26.html. Всё вроде бы ничего, бамп работает, но первый баг что заметен, плоскость вращающаяся под одним и тем же направлением источника света и направлением наблюдателя - от 0-180 градусов освещается вроде бы как положено, но при 180-360 градусов заметно темнеет и не даёт отражения. Т.е. плоскость, допустим квадрат, в своем центре крутится вокруг оси Х и он ей перпендикулярен, т.е. бамп должен работать одинаково если этот квадрат оказался к верх ногами, но нет, он становится слегка темнее, и на нем больше не показываются блики, когда пройдет еще пол оборота(т.е. станет на ноги:)) всё обратно отображается отлично. Я так полагаю что тут зависит направление тангента к источнику освещения, он проворачивается вместе с нормалью при повороте полигона в вершинном шейдере. Но мне не ясно одно - ка с этим бороться, ведь будет проблематично подстраивать объекты в "мире" под источник освещения, хотелось бы не зависить от угла поворота. 
        Может кто сталкивался с такой проблемой, не охота останавливаться на этом и изучить Parallax Mapping или типо Offset Bump Mapping. Но если в простом деле я наткнулся на такой подводный камень, даже нехочется знать что ждет меня в дальнейшем.   

        P.S. Кстати я не шел подряд по этим урокам, я взял только участок кода с получением Тангента, и функцию получения нормали из bump текстуры в фрагметном шейдере. У меня объект вращается с помощью квантерниона и сцена по отношению к камере вращается также с помощью него. Хотя в этих уроках авторы используют матрицы. Если понадобиться выложу куски исходного кода, знаю мало людей в этом разбирается и готовы помогать остальным, но если Кто-то поможет решить эту проблему, здесь появится туториал по Bump Mapping'у, который, я думаю, решит все вопросы по этой теме на форуме)))! Заранее спасибо!  
        
        P.S.(2) Приклепляю принтскрины двух ситуаций, когда стенка из кирпича повернута влево, и когда вправо на 90 градусов, т.е. она вообще по длине была вертикальна, но когда переворачиваешь на -90, она отображается вроде бы ничего так, а когда на +90(как на второй картинке) то  она затемненная какая-то и нет на ней отражений.

        В чем же бок, где же собака зарыта, надеюсь кто нибудь поможет, хотя бы толкните идею, может и сам разколупаю, но очень хотелось бы помощи(отпуска осталось мало, не хотел бы на этом стопориться). Спасибо!

Добавлено через 7 минут и 48 секунд
Извиняюсь за эту тему, но всё там работает в порядке:) Я просто решил в своем шейдере нормализовать BumpNormal получаемую с текстуры, и это и привело к этой ошибке. Я извиняюсь еще раз, но пока не начнешь размышлять над тем как передать свои проблемы другим, сам не догадаешься. Только дописал пост и тут же вспомнил про мою модернизацию))) Всё таки там на сайте все чётко, если что можно удалить этот пост, дабы не захломлять форум. Еще раз Всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)