прямое вращение с ++ - PullRequest
       4

прямое вращение с ++

1 голос
/ 25 сентября 2010

Хорошо, это сложный вопрос.Я создаю куб и пирамиду в одном массиве вершин.Моя проблема состоит в том, чтобы вращать только вершину пирамиды, а не вершину куба, но я не знаю ни одной функции, которая может вращать какую-то вершину.Если я попытаюсь повернуть вершину, я получу вращение пирамиды и куба.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

Либо

  • поместите куб и пирамиду в разные массивы вершин и используйте разные преобразования для рендеринга каждого массива

или

  • применить вращения в вершинном шейдере и передать некоторую вспомогательную информацию для каждой вершины, которая позволяет вершинному шейдеру решить, следует ли рассматривать каждую вершину как часть куба или пирамиды (т.е. применять разные преобразования в каждом случае).Это было бы немного похоже на использование «веса смешивания» для « смешивания вершин »;кроме вас интересует только двоичный регистр.
1 голос
/ 25 сентября 2010

Первая мысль - убедитесь, что вершины для пирамиды и куба занимают отдельные непересекающиеся диапазоны в массиве. При вращении вершин пирамиды сообщайте DirectX об этом диапазоне массива (используйте базовый указатель и размер диапазона, а не полный массив).

Теперь проверю API DirectX ...

EDIT

Подтверждено. Ключевая функция ...

D3DXVECTOR4 * D3DXVec4TransformArray(D3DXVECTOR4 * pOut,
                                     UINT OutStride,
                                     CONST D3DXVECTOR4* pV,
                                     UINT VStride,
                                     CONST D3DXMATRIX* pM,
                                     UINT n
                                    );

В C ++ поддиапазон массива во многих отношениях сам по себе является массивом, или, более того, это, в основном, просто блок памяти без указания на то, где находятся его границы. Таким образом, вы просто передаете другой pV и другой n, чтобы указать поддиапазон, к которому вы хотите применить преобразование, и, что касается функции, что - это весь массив. Вы, вероятно, должны будете скопировать не преобразованную часть отдельно - я полагаю, это работа для memcpy.

Значения шага, как правило, представляют собой просто размер вектора плюс любые выравнивающие отступы, но также можно «соврать» и преобразовать, например каждый третий вектор в массиве.

...