Librăria Libgdx

Dacă doriți să lucrați cu OpenGL ES 2.0, atunci ar trebui să știți câteva fundamentale ale shader-ului. Libgdx vine cu un shader standard care se ocupă de vizualizarea unor lucruri prin SpriteBatch. Cu toate acestea, dacă doriți să faceți o plasă de poligon (Mesh) în Opengl ES 2.0, atunci trebuie să furnizați propriul dvs. shader corect. Practic, toată vizualizarea în Opengl ES 2.0 se face cu ajutorul shaderelor. De aceea se numește o conductă programabilă. Ideea de interferență în zona shader poate sperieri pe unii oameni de la utilizarea ES 2.0, dar merită citit despre ei, cum shaders vă permit să faceți lucruri incredibil de frumoase. Pentru a înțelege elementele de bază este de fapt destul de simplă.

Ce sunt shaderele?

Vertex Shaders

Pe baza numelui, vadrele vertexului sunt responsabile pentru efectuarea operațiunilor pe vârfuri. Mai exact, fiecare execuție a programului acționează exact pe un singur punct. Acesta este un concept important pentru înțelegere. Tot ceea ce faci în shaderul de vârfuri are loc doar cu un singur vârf.

Iată un exemplu simplu al unui shader de vârfuri:

Acum totul arată bine, nu-i așa? Mai întâi trebuie să aveți atributul a_positionului vârf. Acest atribut este vec4. ceea ce înseamnă un vector cu 4 dimensiuni. Acest exemplu conține informații despre poziția vârfului.

Apoi, aveți u_projectionViewMatrix. Această matrice 4x4, care conține datele pentru transformarea proiecției și a vederii. Dacă acești termeni nu vă sunt clar, atunci este recomandat să citiți despre perspectiva și proiecția izometrică.

În interiorul metodei principale, efectuăm operații pe vârf. În acest caz, tot ceea ce face shaderul este multiplicarea poziției vertexului de către matrice și atribuirea rezultatului gl_Position. gl_Position este un cuvânt cheie predefinit de OpenGL și nu poate fi folosit pentru altceva decât trecerea vertexului procesat.

Fragmente shadere

Funcțiile shader-ului de fragment sunt foarte asemănătoare cu shaderul de vârfuri, dar în loc de procesarea nodurilor, procesează fiecare fragment ca o singură dată. Pentru simplitate, luați în considerare fragmentul ca un pixel. Acum îți dai seama că este o diferență foarte importantă.

Să presupunem că triunghiul acoperă o suprafață de 300 de pixeli. Shaderul vârfului pentru acest triunghi va fi executat de 3 ori. Shader-ul fragmentului va fi executat de 300 de ori. Prin urmare, păstrați acest lucru în minte atunci când scrieți shaders. Tot ce se face în fragmentul de shader va fi exponențial mai scump.

Iată un fragment foarte simplu:

Acest fragment de shader va atrage pur și simplu fiecare fragment în roșu roșu. gl_FragColor este un alt cuvânt cheie predefinit. Se utilizează pentru a scoate culoarea finală a fragmentului. Observați cum folosim vec4 (x, y, z, w). pentru a determina vectorul din interiorul shader-ului. În acest caz, vectorul este utilizat pentru a determina culoarea fragmentului.

ShaderProgram

Acum avem o înțelegere comună a ceea ce face shaderul și cum funcționează. Să o creăm în libgdx. Aceasta se face folosind clasa ShaderProgram. Programa Shader constă din shader-uri de vârfuri și fragmente. Puteți face o descărcare dintr-un fișier sau doar să treci un șir și să conțină codul shader în fișierele java.

Aici este instalarea shader-ului, cu care vom lucra:

Aceasta este o setare destul de standard pentru un shader care utilizează un atribut de poziție, un atribut de culoare și un atribut al coordonatelor de textură. Observați primele două modificări efectuate de shader. Ele produc rezultatul, pe care îl trecem la shader-ul fragmentului.

În fragmentul shader, avem sampler2D. aceasta este o formă specială utilizată pentru texturi. După cum puteți vedea în funcția principală, se multiplică culoarea vârfului cu culoarea găsită din textură pentru a obține culoarea finală.

Pentru a crea o ShaderProgram facem urmatoarele:

Putem asigura că shader-ul este compilat corect folosind shader.isCompiled (). Puteți imprima jurnalul de compilare utilizând shader.getLog ().

De asemenea, creăm plasa poligonală potrivită și încărcăm textura:

În metoda de vizualizare, sunăm doar shader.begin () și trecem variabilele uniforme, apoi facem grila cu shader.

Lucrul bun despre shadere în OpenGL ES 2.0 este că aveți o bibliotecă uriașă de shader disponibile. Aproape tot ceea ce se face în WebGL poate fi ușor ported pe dispozitivele mobile.

Articole similare