В прошлый раз для освещения 3-мерной сцены применялась модель освещения по Блинну. В этот раз применим модель Фонга и добавим цвет блику и окружающему освещению (ambient). Модель Фонга отличается лишь тем, что коэффициент для отраженного света вычисляется по-другому. При его расчете учитываются все 3 вектора: нормаль вершины, положение наблюдателя и положение источника света.
Вершинный шейдер:
m44 vt0, va0, vc0 mov op, vt0 mov v0, va1 m44 vt0, va0, vc4 m44 vt1, va2, vc4 nrm vt1.xyz, vt1.xyz mov v1, vt1 sub vt1, vt0.xyz, vc9.xyz sub vt2, vc8.xyz, vt0.xyz nrm vt1.xyz, vt1.xyz nrm vt2.xyz, vt2.xyz mov v2, vt1 mov v3, vt2
и фрагментный:
dp3 ft0.xyzw, v2.xyz, v1.xyz sat ft0, ft0 dp3 ft2.xyzw, v1.xyz, v3.xyz mul ft2.xyz, ft2.xyz, v1.xyz add ft2.xyz, ft2.xyz, ft2.xyz sub ft2.xyz, v3.xyz, ft2.xyz dp3 ft2.xyzw, v2.xyz, ft2.xyz sat ft2, ft2 pow ft2.xyzw, ft2.x, fc3.x add ft2, ft2, fc2 tex ft1, v0, fs1 <2d,clamp,linear> mul ft0, ft1, ft0 add ft0, ft0, ft2 add ft0, ft0, fc0 mov oc, ft0
Отсюда можно загрузить исходный код примера (*.rar, ~4Mb). Помните, что пример создавался для Flash Player 11 Incubator.
7 комментариев:
Хорошие примеры спасибо. А с CubeTexture не разобрались? Как отражение сделать более или менее вменяемое?
Пожалуйста.
На очереди были системы частиц и отражение/преломление, но, к сожалению, совершенно нет времени.
Все равно спасибо!
Да время дефицит.
Даешь 36 часов в сутки!!!
Николай, как ваши примеры под альтернативу заточить?
Я Иван. :) Это Вконтакте - редиски, не дают сменить имя.
Надо смотреть API Альтернативы 8. Наверняка как-то можно. К сожалению, я совершенно перезагружен по работе и пока не смогу помочь.
Извините Иван, редиски дезинформировали :)
Ваши уроки по AGAL до сих пор в инете самые лучшие.
Спасибо! Рад, что пригодилось. Жаль только не успел закончить задуманное :)
Отправить комментарий