Вопрос

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

  1. Я устанавливаю Spritesheet в качестве однородной Sampler2D в шейдере фрагмента. 2048x 2048 (12 х 12 кадров 128 пикселей квадрат)
  2. Я создаю точку.
  3. Я устанавливаю УФ-координаты в вершине вершины для точки.
  4. Я компенсирую ультрафиолетовые координаты в шейдере Vertex, прошедший в целом, прошедшем в качестве единой переменной для выбора «кадров» в спрайтешении
  5. Я обновляю целое число (используя модуль для цикла и) увеличение компенсации UV каждые 5 кадров в приложении.
  6. Это означает, что я могу сделать базовые анимационные последовательности из вершины вершины. Я понятия не имею, если это желательно, но я подозреваю, что он будет работать лучше, чем установить новую однородную Sampler2D в шейдере фрагмента каждый раз, когда я хочу изменить кадры.

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

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

Это было полезно?

Решение

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

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

1: gluseProgram (yourprogram);

2: Комплект текстуры и УФ для первого объекта

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

4: Комната новой текстуры (или держать такую же текстуру - это спрайты там) Комплект UV для второго объекта

5: ..draw второй объект и так на

Редактировать: программа не связана с помощью формы, которую вы устанавливаете его, вы всегда можете изменить, и снова вызовите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top