23 июля 2011 г.

Flash3D, Molehill. Модель освещения по Фонгу на AGAL

В прошлый раз для освещения 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 комментариев:

MMMaXXX комментирует...

Хорошие примеры спасибо. А с CubeTexture не разобрались? Как отражение сделать более или менее вменяемое?

Иван комментирует...

Пожалуйста.

На очереди были системы частиц и отражение/преломление, но, к сожалению, совершенно нет времени.

MMMaXXX комментирует...

Все равно спасибо!
Да время дефицит.
Даешь 36 часов в сутки!!!

MMMaXXX комментирует...

Николай, как ваши примеры под альтернативу заточить?

Иван комментирует...

Я Иван. :) Это Вконтакте - редиски, не дают сменить имя.

Надо смотреть API Альтернативы 8. Наверняка как-то можно. К сожалению, я совершенно перезагружен по работе и пока не смогу помочь.

MMMaXXX комментирует...

Извините Иван, редиски дезинформировали :)
Ваши уроки по AGAL до сих пор в инете самые лучшие.

Иван комментирует...

Спасибо! Рад, что пригодилось. Жаль только не успел закончить задуманное :)

Отправить комментарий