XNA 3.1 несколько спрайтов с разными матрицами преобразования? - PullRequest
1 голос
/ 11 июня 2011

У меня есть 2 типа объектов, один из которых является 2D и будет смотреть только вперед, как плоское изображение, а другой будет 3D, так что он масштабируется и наклоняется в соответствии с различными поворотами.Так что SpriteBatch.Begin применяет матрицу ко всему, пока я не назову End.Я где-то читал, что мне следует дважды вызывать Begin, один раз, чтобы нарисовать 2D-спрайты, и один раз, чтобы нарисовать 3D-объекты, но я не знаю, как бы я изменил матрицу в соответствии с потребностями каждого 3D-объекта, и мне очень жальне помню, что за ссылка была.

Поэтому я хотел бы знать, как это сделать, не вызывая Begin и End для каждого объекта, потому что это было бы катастрофически.

1 Ответ

2 голосов
/ 11 июня 2011

Правильное решение здесь состоит в том, чтобы не использовать SpriteBatch для трехмерного рисования. Вы должны начать использовать фактический API для рисования 3D.

SpriteBatch - это просто удобный слой поверх 3D API для рисования 2D-спрайтов. Вы можете, например, написать свою собственную 3D версию SpriteBatch.

В пределах SpriteBatch невозможно указать более одной матрицы преобразования для каждого пакета. Поэтому, если вам нужно иметь несколько матриц, вы должны иметь несколько пакетов (несколько блоков начала / конца).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...