Могут ли матрицы существовать на вершинных регистрах, кроме вершинных констант в 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 и т. Д.

Я почти уверен, что временные регистры также содержат матрицы и ваш запрос возможен, но вы можете получить лучший ответ от кого-то вроде Марко Скабиа:

http://iflash3d.com/

Он очень доступен и хорошо осведомлен об AGAL.

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