2012-03-18 2 views
8

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

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

+2

«Могу ли я установить прозрачный цвет ... или использовать прозрачную текстуру» ... Почему бы вам просто не попробовать? Тогда вернитесь и скажите нам. – Ben

ответ

0

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

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

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

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

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

Смежные вопросы