Могут ли матрицы существовать на вершинных регистрах, кроме вершинных констант в AGAL?
В основном я видел примеры, когда объект Matrix3D передается как регистр постоянной вершины в AS3 объекту Context3D. Но никогда не видел матрицы ни в каких других типах регистров (временных или атрибутных).
Будет ли какой-либо способ скопировать константу вершины Matrix во временный регистр, а затем манипулировать отдельными полями этого временного регистра Matrix (например, для вращения) с другими предоставленными значениями (атрибутами вершин или другими константами)?
Мог простой mov dest, source
операция делает свое дело?
2 ответа
Да, это работает (возьмите его от Крота:)). Просто убедитесь, что скопировали достаточно (3 или 4) регистров. Также хороший способ думать о матричных операциях состоит в том, что они являются всего лишь ярлыком для 3 или 4-точечных инструкций продукта. В AGAL действительно ничего не напечатано, а матрица - это всего лишь несколько последовательных регистров. Функции загрузки матриц удобны только для загрузки до 4 регистров за один вызов. И в шейдере
m44 dest, src, srcmatrix
это точно так же, как:
dp4 dest.x srx, srcmatrix
dp4 dest.y srx, srcmatrix+1
dp4 dest.z srx, srcmatrix+2
dp4 dest.w srx, srcmatrix+3
+1 и т. Д. Здесь означает регистрационный номер +1 и т. Д.
Я почти уверен, что временные регистры также содержат матрицы и ваш запрос возможен, но вы можете получить лучший ответ от кого-то вроде Марко Скабиа:
Он очень доступен и хорошо осведомлен об AGAL.