AGAL: m44 вместо Matrix3D.append()

Как перенести такой расчет:

var a : Matrix3D = ...
var b : Matrix3D = ...
a.append( b );

в шейдере?

Мой текущий подход:

setProgramConstantsFromMatrix( VERTEX, 0, a, true );
setProgramConstantsFromMatrix( VERTEX, 4, b, true );


"mov vt0, vc0\n" + 
"mov vt1, vc1\n" + 
"mov vt2, vc2\n" + 
"mov vt3, vc3\n" + 
"m44 vt4, vc4, vt0\n"

выдавать неправильные результаты в vt4. Что я делаю неправильно?

1 ответ

В шейдере вам не нужно назначать vt1, 2 и 3. Шейдер будет "знать", что ему отправляется матрица, и автоматически загружает следующие 3 регистра (всего 4 регистра) с необходимыми деталями. Загрузка их самостоятельно может привести к непредсказуемым результатам.
Также обратите внимание, что порядок применения умножения matrix3D имеет значение. В AS3 также есть метод prepend, который помещает параметр matrix3D в правую часть умножения. Метод append помещает параметр matrix3D в левую часть умножения. Тогда вам может понадобиться изменить порядок, в котором вы применяете m44. то есть; Вы можете установить vt1 в b, а затем умножить (m44) на a.

Другие вопросы по тегам