ПредишенСледващото

Ако искате да работите с OpenGL ES 2.0, тогава трябва да знаете някои основни положения на шейдъри. Libgdx идва стандартно с шейдър, че се грижи за някои неща, чрез визуализация SpriteBatch. Все пак, ако искате да се визуализира на окото (Mesh) в OpenGL ES 2.0, ще трябва да предоставите вярна шейдъри. По принцип, цялата визуализация в OpenGL ES 2.0 прави с шейдъри. Ето защо тя се нарича на програмируем тръбопровода. Идеята за намеса в областта на шейдърите, може да възпре някои хора да използват ES 2.0, но добре си струва да прочетете за тях като шейдъри ви позволяват да правите от невероятно красиви неща. Разбиране на основите на доста проста.

Какви са шейдъри

вертексни шейдъри

Както подсказва името, водоплаващи на върховете са отговорни за извършване на операции по върховете. По-конкретно, всяка изпълнение на програмата е валидна за точно един връх. Това е важна концепция за разбиране. Всичко, което правите в Shader вертекс, има само по един връх точно.

Ето един прост пример за шейдър връх:

Сега всичко изглежда добре, нали? Първо трябва да имате атрибутите върховете a_position. Този атрибут е vec4. означава, че векторът с 4 измервания. Този пример, той дава информация за най-горната позиция.

На следващо място, трябва да имате u_projectionViewMatrix. Тази матрица 4x4, което съдържа данни за превръщане проекция и видове. Ако тези условия не са ясни за вас, се препоръчва да се чете на дългосрочен план и изометрия.

Вътре в основен метод извършваме операции на върха. В този случай, всички вземане на шейдър, тя умножава позицията на върха на матрицата и възлага gl_Position резултат. gl_Position този OpenGL ключови думи предварително определени и не могат да бъдат използвани за нищо друго, освен да предава обработената връх.

фрагмент шейдъри

Фрагмент функции шейдър са много подобни на Shader на върха, но вместо обработка връх, обработва всеки фрагмент веднъж. За простота, помислете фрагмент като един пиксел. Сега разбирам, че това е много съществена разлика.

Да предположим, че триъгълника е с площ от 300 пиксела. Vertex Shader за този триъгълник ще се извършва 3 пъти. Фрагмент шейдър ще бъде изпълнена 300 пъти. Така че имайте това предвид, когато пишете шейдъри. Всичко, което се прави с Shader на фрагмент, той ще бъде експоненциално по-скъпи.

Ето една много проста фрагмент шейдър:

Този фрагмент шейдър просто ще изготви всяка част от плътно червени. gl_FragColor е друга предварително определена дума. Тя се използва за извеждане на крайния цвят на фрагмента. Забележете как използваме vec4 (X, Y, Z, W). за да се определи вектора в Shader. В този случай, векторът, използван за определяне на цвета на фрагмента.

ShaderProgram

Сега имаме общо разбиране на това, което прави Shader и как работи. Нека да го създаде в libgdx. Това се прави с помощта на ShaderProgram клас. ShaderProgram състои от връх и фрагмент шейдъри. Можете да направите с мишката файл или просто минават низа, и съдържат кода на шейдър във вашите Java файлове.

Тук настройка шейдър, с които работим:

Това е доста стандартна настройка за шейдър, който използва атрибута позиция, цвят атрибут, и приписват координатите на текстурата. Обърнете внимание на първите две промени, внесени в Shader. Те дават резултат, който ние минаваме през Shader на фрагмент.

В Shader на фрагмент имаме sampler2D. специален формуляр се използва за текстуриране. Както можете да видите в основната си функция умножим цвета на връх намерени на цвят от текстурата, за да се получи крайният цвят изход.

За да създадете ShaderProgram правим следното:

Ние можем да се уверите, че Shader се компилира правилно използване shader.isCompiled (). Вход съставяне може да бъде получена посредством shader.getLog ().

Ние също така се създаде съответния полигон мрежата и да заредите текстура:

При метода на изображения, ние просто се обадете shader.begin () и да премине Единните променливи, а след това направи решетка визуализация Shader на.

Хубавото на шейдъри в OpenGL ES 2.0, които имате огромна библиотека от шейдъри на разположение. Почти всичко, което е направено в WebGL могат лесно да бъдат прехвърлени към мобилни устройства.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!