Direct3D: рисовать текстурированный куб с помощью одного вызова DrawIndexedPrimitives. Возможный? - PullRequest
2 голосов
/ 01 марта 2010

Я пытаюсь нарисовать текстурированный куб, используя всего 8 вершин и один DrawIndexedPrimitives вызов. Это вообще возможно?

У меня проблемы с координатами УФ. Я считаю невозможным найти подходящие значения УФ, которые будут работать для всех граней куба.

Взять в качестве примера следующую нумерацию:

Cube with UV Values

UV установлен на (0, 0) для вершины A. Для всех вершин, диагонально противоположных A (на всех трех гранях, разделяющих A как вершину), я устанавливаю UV на (1, 1). Теперь три грани, которые не имеют A в качестве вершины, в итоге имеют две вершины, каждая из которых имеет значение UV (1, 1). Насколько я понимаю, этого не должно быть.

Какое же решение?

1 Ответ

4 голосов
/ 01 марта 2010

Это невозможно, если одна вершина имеет несколько UV-координат.

Чтобы обойти эту проблему, продублируйте положение вершины и назначьте каждой копии уникальную UV-координату. Это увеличит количество вершин до 24 для куба в худшем случае (четыре на сторону).

Это то, что каждый делает независимо от того, использует он OpenGL или DirectX. Для куба это может выглядеть как большая потеря памяти, но на практике - с реальными моделями - количество дублирования вершин не так велико.

После этого вы можете нарисовать куб одним вызовом DrawIndexedprimitive.

...