Первая часть покрыта ответом Торстена ... вам понадобятся array
или numarray
, чтобы что-либо делать с этими данными.
Что касается% 08X и hex2dec stuff,% 08X - это только формат печати для этих чисел unit32 (8-разрядный шестнадцатеричный, точно такой же, как Python), и hex2dec ('4D445254') - это matlab для 0x4D445254.
Наконец, ~ = в matlab побитовое сравнение; use == в Python.
Вам не нужно менять код приложения. Поскольку вы используете последовательные текстурные индексы, вы можете просто заменить три отдельных параметра одним параметром массива текстуры, привязанным к индексу 0, и привязки свяжут элементы массива с текстурами, которые вы предоставили из кода приложения. [115 ]
Другими словами, если вы объявляете массив текстур с размером 3 и привязанным к индексу текстуры 0, элементы массива берутся из индексов текстуры 0, 1 и 2.
Обновление для вашего отредактированного вопроса:
Вы путаете массив из текстур (также называемый массивом текстур) и текстуру массива. Терминология запутанно тонкая.
Вы использовали texture2d_array<...>
. Это текстура массива.
Для текстурного массива или массива текстур вы должны использовать array<texture2d<float, access::sample>, 3> clouds [[texture(0)]]
.
Для выборки из текстуры в массиве вы сначала индексируете массив, а затем вызываете функцию текстуры для этого элемента:
float4 color = clouds[params.index].sample(defaultSampler, float2(params.textureCoordinates)) * float4(1,0,0,1.0);