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.