OpenGL ES 2.0: Konfigurowanie projekcji 2D

15

W tym artykule opisano ogólnie, jak narysować ostrą grafikę OpenGL 2D przy użyciu potoku o stałej funkcji.

Ponieważ OpenGL ES 2.0 ma niektóre funkcje ES 1.x niedostępne (takie jak: glOrtho ()), ich funkcjonalność musi zostać podstawiona w shaderach Fragment / Vertex.

Moje pytanie brzmi: jak ustawić następującą projekcję 2D w potoku funkcji programowalnych?

const XSize = 640, YSize = 480
glMatrixMode (GL_PROJECTION)
glLoadIdentity ();
glOrtho (0, XSize, YSize, 0, 0, 1)
glMatrixMode (GL_MODELVIEW)

W jaki sposób shadery fragmentów i wierzchołków muszą być skonfigurowane, aby w pełni zastąpić wyżej wymienioną stałą konfigurację projekcji 2D?

Bunkai.Satori
źródło

Odpowiedzi:

12

W moim silniku OpenGL ES 2.X obliczam macierz MVP (projekcja widoku modelu) po stronie procesora i wstrzykuję ją do modułu cieniującego wierzchołki.

Rzut ortogonalny jest matrycą 4 * 4 . Kiedy mam MVP, wstrzykuję go do modułu cieniującego wierzchołków za pomocą:

 mMvpLoc = getUniformLocation("uMvp");
 glUniformMatrix4fv(mMvpLoc, 1, false, mMvp.pointer());

MMvp to moja matryca 4 * 4 po stronie procesora. GetUniformLocation można wykonać tylko raz po załadowaniu modułu cieniującego program.

Przykład modułu cieniującego wierzchołki:

uniform mat4    uMvp;
attribute vec3 aPosition;
varying vec4 vColor;

void main() {
   vec4 position = vec4(aPosition.xyz, 1.);
   gl_Position = uMvp * position;
}

Gl_Position jest specjalną predefiniowaną zmienną. Musi zawierać pozycję wierzchołka.

Przykład shadera fragmentów. Dla każdego punktu do narysowania należy obliczyć końcowy kolor „gl_FragColor”:

#ifdef GL_ES
precision highp float;
#endif

void main(void)
{
   gl_FragColor = vColor;
}

Ten program rysuje trójkąt z wygładzeniem kolorów zdefiniowanym dla każdego wierzchołka.

Aby uzyskać lepszy samouczek, zobacz ten wspaniały dokument.

Ellis
źródło
Cześć Ellis, to doskonała i kompletna odpowiedź. Dziękuję Ci bardzo. Pozdrowienia.
Bunkai.Satori
9

Z dokumentu glOrtho z podstawionymi wartościami:

         2
    ------------       0              0             -1
       XSize
                       2
        0         ------------        0              1
                   - Ysize
        0              0              -2            -1
        0              0              0              1

Przechowuj tę macierz w mundurze, a następnie możesz ją zastosować (tj. Zrób produkt M. V) do przychodzących pozycji wierzchołków.

Bahbar
źródło
Drogi Bahbar, Dziękuję za odpowiedź. Zasadniczo więc w ES2.0 nie ma nic innego, tylko ręczne tworzenie zamiany macierzy glOrtho ().
Bunkai.Satori
@ Bunkai.Satori: Cóż, jest w tym trochę więcej, że GL przesyła połączenie widoku modelu i projekcji do munduru.
Bahbar,