Спирити листи з буферними об'єктами та шейдерами


9

Який "найкращий" спосіб попрацювати з спрайтовими листами за допомогою шейдерів і буферів? У безпосередньому режимі легко змінювати текстові тексти спрайта, коли він малюється, але я не знаю, як це зробити за допомогою сучасного opengl. Чи варто зберігати всі текстові слова в буфері та змінювати вказівник для кожного спрайту, чи є кращий спосіб?

Відповіді:


11

Ви завжди можете зробити повторний буфер "vertex; texcoord" повторити. І просто використовуйте індекси, як ви сказали. Це, мабуть, найпростіше і схоже на те, що ви знаєте.

Якщо ви хочете зберегти трохи пам’яті. Існує досить акуратне рішення, і це мати один спрайт у буфері з об'єднаними текстовими кодами та створити матрицю перетворення УФ-променів і надіслати її на ваш шейдер і помножити текстові тексти з ним (у вершинній шейдері).

Вам не доведеться створювати матриці самостійно, якщо вам це не вдається. Ви можете просто використовувати звичайні функції GL і ніж читати матрицю з glGetFloatvфункцією. Подобається це:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Я створив образ, щоб краще описати це. glTranslate та glScale можна виглядати так, що вони просто рухаються з ультрафіолетовим простором.

spritesheet uvs

Якщо ви не знаєте, як надіслати матрицю на шейдер, я можу поділитися з вами деяким кодом.

Редагувати: Додано зображення
(джерело для спрайта, який я використовував: funorb.com )


Нічого, дякую! Ідеальна відповідь. Мені дуже подобається це рішення, і я розглядаю його, як тільки повернусь з роботи. :-) Якщо я застряг, я набридну вам ще деякими питаннями.
uggwar

Це, наскільки я бачу, призведе до отримання одного дзвінка для кожного спрайту. Чи є спосіб створити ці справки для більш плавної реалізації?
uggwar

@uggwar Вкладений малюнок?
Нотабене
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.