Как нарисовать тысячи спрайтов с разной прозрачностью? - PullRequest
8 голосов
/ 18 марта 2012

Привет, я использую Firemonkey из-за его кроссплатформенных возможностей.Я хочу сделать систему частиц.Теперь я использую TMesh, который работает достаточно хорошо для быстрого отображения частиц.Каждая частица представлена ​​в сетке двумя текстурированными треугольниками.Используя разные текстурные координаты, я могу показать много разных типов частиц с одной и той же сеткой.Проблема в том, что каждая частица может иметь свою прозрачность / непрозрачность.С моим текущим подходом я не могу установить прозрачность индивидуально для каждого треугольника (или даже вершины).Что я могу сделать?

Я понял, что в TMesh.Data.VertexBuffer есть некоторые другие свойства, такие как Diffuse или другие наборы текстур (TexCoord1-3), но эти свойства не используются (даже не инициализированы) в TMesh.Также, кажется, нелегко просто изменить это поведение, наследуя от TMesh.Кажется, нужно наследовать от элемента управления более низкого уровня, чтобы инициализировать VertextBuffer с большим количеством свойств.Прежде чем я попробую это, я хотел бы спросить, можно ли с помощью этого контролировать прозрачность треугольника.Например, я могу установить прозрачный цвет (Diffuse) или использовать прозрачную текстуру (TextCoor1)?Или есть лучший способ рисовать частицы в Firemonkey.

1 Ответ

0 голосов
/ 30 августа 2012

Я признаю, что не очень много знаю об этой конкретной структуре, но вы не сможете изменить прозрачность через точки вершин в 3D-модели.Точки обычно представляют собой координаты x, y, z.Теперь точки вершин будут влиять на освещение спрайтов, если вы используете систему освещения.Вы также можете использовать информацию вершин для применения различных эффектов прозрачности

Теперь, вероятно, существует дюжина различных способов сделать это.Обычно у вас есть текстура с разной степенью альфа-значений, которые можно установить во время выполнения.Графические API обычно имеют некоторую функцию фильтрации, которая может быстро применять значения к спрайтам / текстурам, и хороший будет использовать ваш графический чип, если он доступен.

Если вы можете использовать эффект, обычно лучше, так как ядерный способ состоит в том, чтобы сделать кучу разных копий спрайта, а затем применить эффекты к ним индивидуально.Если вы используете Gouraud Shading, то это станет проще, поскольку Gouraud использует код для заполнения текстурной информацией.

Теперь вы используете легкие частицы?Некоторые графические API на самом деле имеют код, который создает легкие частицы.

Редактировать: Я только что вспомнил Vertex Shaders, который мог.

...