Морфинг в MoleHill с использованием вершинного шейдера
Используя Molehill с Flash, я хочу создать шейдер vertiex, чтобы преобразовать одну сетку в другую, я видел, что это возможно с Flare, однако я не уверен, использовал ли это Stage3D, может ли кто-нибудь дать мне какие-нибудь советы по использованию шейдеров в AGAL о том, как это можно сделать. Спасибо
2 ответа
(может быть, слишком поздно)
морфинг - это "просто" линейная интерполяция между двумя наборами позиций.
при условии, что у вас есть первый vertexBuffer VA0, представляющий начало координат, и второй вершинный буфер VA1, представляющий ваши пункты назначения. Вы можете хранить их во временных регистрах:
"mov vt0 va0 \n" +//temp var, will hold the result
"mov vt1 va0 \n" +//start position
"mov vt2 va1 \n" +//destination
тогда вам понадобится значение T, которое вы можете передать как константу, например:
context.setProgramConstantsFromVector( Context3DProgramType.VERTEX, id, constant );
если вы передаете что-то вроде
Vector.<Number>([ T, 0,0, 1 ])
с 0<=T<=1 в качестве константы и положением его в id 0, следующий код преобразует (линейно интерполирует) выходные позиции из начальной позиции в конечную позицию.
//lerp
"sub vt0 vt2 vt1 \n" +
"mul vt0 vt0 vc0.x \n" +
"add vt0 vt0 va1 \n" +
тогда вам нужно спроектировать VT0, чтобы получить правильный вывод.
Следующая версия пиксельного бендера должна поддерживать создание как трехмерных вершинных, так и фрагментных шейдеров. Предварительный релиз должен быть доступен здесь