Правильное решение здесь состоит в том, чтобы не использовать SpriteBatch
для трехмерного рисования. Вы должны начать использовать фактический API для рисования 3D.
SpriteBatch
- это просто удобный слой поверх 3D API для рисования 2D-спрайтов. Вы можете, например, написать свою собственную 3D версию SpriteBatch
.
В пределах SpriteBatch
невозможно указать более одной матрицы преобразования для каждого пакета. Поэтому, если вам нужно иметь несколько матриц, вы должны иметь несколько пакетов (несколько блоков начала / конца).
Если вы действительно увлечены решением на основе SpriteBatch
, то можно сделать это таким образом - чтобы вы могли попробовать и посмотреть, как производительность есть.
(Вы также можете сделать очень уродливый хак, где вы замените вершинный шейдер, каким-то образом упаковав данные трехмерного преобразования в каждый спрайт, а затем распаковав их в шейдер. Уродливо. Не делайте этого. [Редактировать: также переопределяет вершинный шейдер SpriteBatch
очень сложный XNA до 4.0])