QVM: Quaternions, Vectors, Matrices
Swizzling
Усиление QVM позволяет получать доступ к векторным элементам путем распухания , обнажая векторные представления различных размеров и/или представления с переупорядоченными элементами. Приведенный ниже пример вращает v вокруг оси X и сохраняет полученный вектор обратно в v, но с заменой элементов X и Y:
float3 v = {0,0,7};
YXZ(v) = rotx_mat<3>(3.14159f) * v;
Специальный случай свиста дает представление о векторном объекте следующего измерения, добавляя 0 или 1 в качестве последнего компонента. Предполагая, что float3 является 3D-векторным типом, а float4 является 4D-векторным типом, следующие утверждения действительны:
float3 v = {0,0,7};
float4 point = XYZ1(v); //{0,0,7,1}
float4 vector = XYZ0(v); //{0,0,7,0}
Он также действителен для передачи векторных элементов более одного раза:
float3 v = {0,0,7};
float4 v1 = ZZZZ(v); //{7,7,7,7}
Boost QVM определяет все перестановки X, Y, Z, W для 1D, 2D, 3D и 4D swizzling, плюс каждое измерение определяет варианты с 0 или 1, используемые в любом положении (если 0 или 1 появляются в первом положении, имя функции swizzling начинается с подчеркивания, например _1XY).