Листы спрайтов с буферными объектами и шейдерами

Каков наилучший способ обработки спрайтов с помощью шейдеров и буферов? В непосредственном режиме легко модифицировать texcords sprite, когда он нарисован, но я не знаю, как это сделать с современным opengl. Должен ли я хранить все texcoords в буфере и изменять указатель для каждого спрайта, или есть лучший способ?

9 голосов | спросил uggwar 30 Jpm1000000pmSun, 30 Jan 2011 23:56:46 +030011 2011, 23:56:46

1 ответ


11

Вы всегда можете повторить повтор буфера «vertex; texcoord». И просто используйте индексы, как вы сказали. Он максимально удобен и похож на то, что вы знаете.

Если вы хотите сохранить некоторую память. Существует довольно аккуратное решение, и он должен иметь один спрайт в буфере с объединением текскодов и создать матрицу преобразования UVs и отправить ее в ваш шейдер и умножить на нее текскоды (в вершинном шейдере).

Вам не нужно создавать матрицы самостоятельно, если вы не в порядке с этим. Вы можете просто использовать обычные функции GL и читать матрицу с помощью функции glGetFloatv. Вот так:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Я создал изображение, чтобы описать его лучше. glTranslate ang glScale можно рассматривать как то, что они просто движутся с УФ-пространством.

spritesheet uvs

Если вы не знаете, как отправить матрицу в шейдер, я могу поделиться с вами некоторым кодом.

Изменить: Добавлено изображение
(источник для спрайтов, которые я использовал: funorb.com )

ответил Notabene 31 Jam1000000amMon, 31 Jan 2011 01:43:45 +030011 2011, 01:43:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132