Первая мысль - убедитесь, что вершины для пирамиды и куба занимают отдельные непересекающиеся диапазоны в массиве. При вращении вершин пирамиды сообщайте DirectX об этом диапазоне массива (используйте базовый указатель и размер диапазона, а не полный массив).
Теперь проверю API DirectX ...
EDIT
Подтверждено. Ключевая функция ...
D3DXVECTOR4 * D3DXVec4TransformArray(D3DXVECTOR4 * pOut,
UINT OutStride,
CONST D3DXVECTOR4* pV,
UINT VStride,
CONST D3DXMATRIX* pM,
UINT n
);
В C ++ поддиапазон массива во многих отношениях сам по себе является массивом, или, более того, это, в основном, просто блок памяти без указания на то, где находятся его границы. Таким образом, вы просто передаете другой pV
и другой n
, чтобы указать поддиапазон, к которому вы хотите применить преобразование, и, что касается функции, что - это весь массив. Вы, вероятно, должны будете скопировать не преобразованную часть отдельно - я полагаю, это работа для memcpy.
Значения шага, как правило, представляют собой просто размер вектора плюс любые выравнивающие отступы, но также можно «соврать» и преобразовать, например каждый третий вектор в массиве.