2013-11-15 2 views
0

Я экспериментирую с шейдерами с обработкой 2.0. Как простой Excersise в понимании точки шейдеры немного лучше, я реализовал систему, при которой в классе Sprite:Как создать несколько PointSprites в разных состояниях?

  1. я поставил spritesheet как единая sampler2D в пиксельный шейдер. 2048x 2048 (12 x 12 кадров с квадратом 128 пикселей)
  2. Я создаю точку.
  3. Я устанавливаю координаты uv в вершинном шейдере для точки.
  4. я смещение УФ-координата в шейдере вершин целого числом переданного в качестве единой переменного, чтобы выбрать «кадры» в spritesheet
  5. Я обновить целое число (с использованием модуля к петле и) увеличивающейся УФ смещениям каждые 5 кадров в приложении.

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

Мой вопрос: как я могу использовать этот шейдер для нескольких экземпляров? Если я хочу, чтобы два из спрайтов на экране в то же время каждый с разными значениями (т. Е. Играли разные кадры анимации), как это достигается без каждого из них, имеющего свой собственный pointShader и, следовательно, свою собственную копию единого Sampler2D в памяти?

Надеюсь, вы сможете помочь.

ответ

0

Да, этот подход намного лучше, чем установка новых текстур в каждом кадре.

Чтобы нарисовать несколько спрайтов просто использовать ту же самую программу и Нарисуйте объекты один за другим, используя различные формы:

1: glUseProgram (yourprogram);

2: ..set текстура и ультрафиолетовые лучи для первого объекта

3: ..draw первого объект

4: ..set новой текстуры (или сохранить ту же текстуру является спрайты есть) ..set ультрафиолетовые для второго объекта

5: ..draw второго объекта и так далее

Edit: программа не связана мундирами вы установили на него, вы всегда можете изменить то и вызовы снова нарисуй.

+0

Спасибо - я работаю, так просто. –