При кодировании на низкоуровневом AGAL нужно ли вам создавать новый Program3D для каждой текстуры?

StackOverflow https://stackoverflow.com/questions/7829869

Вопрос

Например ...

Если я разрабатываю приложение, в котором требуется более одной текстуры (в основном уникальные спрайты), нужно ли мне вызывать context3D.createProgram(); и собирать новый код Program3D ( с кодом VertexShaderAssembler и кодом FragmentShaderAssembler ) для каждой отдельной текстуры, которую я хочу использовать в приложении?

Как обычно работает генератор кодовых тегов в движке?Одна программа запускает все это целиком или использует одну программу для текстур , моделей , карты ?

И правильно ли я предполагаю, что вам нужно создать код Program3D только один раз во время инициализации (Program3D), а не во время каждого кадра (Event.ADDED_TO_STAGE), верно?

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

Решение

Для одной программы (шейдера) можно иметь несколько текстур.Обычно вы пишете программу для каждого имеющегося у вас шейдера. Например, в моей игре у меня есть один шейдер (программа) для освещения, текстурирования и раскраски ландшафта.У меня есть другой шейдер (программа) для воды.

Итак, программы создаются один раз, но я говорю context3d, какую программу использовать, прежде чем рисовать сцену.Таким образом он будет рисовать все, что я собираюсь рисовать в текущей программе.

Пример использования:

родовое слово

Сначала я рисую воду, а затем ландшафт, каждый с использованием разных шейдеров. Мой TerrainShader имеет несколько текстур, напримертекстуры песка, камня и грязи.Шейдер решает, какую текстуру использовать в данный момент.Например.если высота вершины <10, то используйте текстуру песка.

Итак, создайте программы один раз и используйте их при необходимости.

Надеюсь, это поможет вам правильно.

Другие советы

Вам не нужен новый Program3D для каждой текстуры.Средство визуализации использует последний набор программ всякий раз, когда вы вызываете drawTriangles ().Если вам нужно обрабатывать определенные текстуры по-разному, так что вам нужен другой шейдер фрагментов, тогда вам понадобится более одного объекта Program3D, но это будет редкий случай, когда вам понадобится другой шейдер для каждого объекта и текстуры.

Не написав движка, я не могу сказать вам, как это обычно делается.Я бы подумал, что у вас будут разные объекты Program3D для разных классов моделей, карт среды и т. Д. Вероятно, не по одному на каждую сущность.Вы ограничены примерно 4000 объектами Program3D.

Да, вам следует заранее создать и инициализировать свои объекты Program3D.Во время рендеринга вы вызываете Context3D.setProgram (), чтобы указать активную программу.Эта программа используется для рендеринга, пока вы ее не измените.

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