OpenGL ES 2.0: Налаштування 2D-проекції


15

Ця стаття в цілому описує, як намалювати чітку графіку OpenGL 2D, використовуючи конвеєр з фіксованою функцією.

Оскільки OpenGL ES 2.0 має деякі функції ES 1.x, недоступні (наприклад, glOrtho ()), їх функціональність повинна бути замінена у шрифтах Fragment / Vertex.

Моє питання полягає в тому, як встановити наступну 2D-проекцію в програмованому функціональному трубопроводі?

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

Як шейдери Fragment і Vertex повинні бути налаштовані так, щоб повністю замінити вищезазначені налаштування 2D-проекції фіксованої функції?

Відповіді:


12

У моєму двигуні OpenGL ES 2.X я обчислював матрицю MVP (Model View Projection) на стороні процесора та вводив її у вершину шейдера.

Ортогональна проекція - це матриця 4 * 4 . Коли у мене є MVP, я ввожу його у вершинній шейдер із:

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

MMvp - це моя матриця 4 * 4 на стороні процесора. Отримати getUniformLocation можна лише один раз після завантаження програмного шейдера.

Приклад вершинного шейдера:

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

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

Gl_Position - це спеціальна заздалегідь визначена змінна. Він повинен містити положення вершини.

Приклад фрагмента шейдера. Для кожної точки малювання слід обчислити кінцевий колір "gl_FragColor":

#ifdef GL_ES
precision highp float;
#endif

void main(void)
{
   gl_FragColor = vColor;
}

Ця програма намалює трикутник з вирівнюванням кольорів, визначених для кожної вершини.

Для кращого підручника подивіться цей чудовий документ.


Привіт Елліс, це відмінна і повна відповідь. Велике спасибі. З повагою
Bunkai.Satori

9

Від документа glOrtho із заміненими значеннями:

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

Зберігайте цю матрицю в мундирі, і ви зможете застосувати її (тобто зробіть продукт M. V) до вхідних вершинних позицій.


Шановний Бахбар, дякую за відповідь. Таким чином, в ES2.0 немає нічого іншого, просто вручну створюючи заміну матриці glOrtho ().
Bunkai.Satori

@ Bunkai.Satori: Ну, є дещо більше в тому, що, як правило, GL завантажує композицію модельного перегляду та проекції до уніформи.
Бахбар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.