OpenGL ES 2.0: 2D Projeksiyonu Ayarlama


15

Bu makalede, genel olarak, sabit işlevli boru hattı kullanılarak keskin OpenGL 2D grafiklerin nasıl çizileceği açıklanmaktadır.

OpenGL ES 2.0'da bazı ES 1.x işlevleri bulunmadığından (örneğin: glOrtho ()), işlevlerinin Fragment / Vertex gölgelendiricileriyle değiştirilmesi gerekir.

Benim sorum şu programlanabilir fonksiyon boru hattında aşağıdaki 2D projeksiyon nasıl kurulur?

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

Fragment ve Vertex gölgelendiricileri yukarıda belirtilen sabit fonksiyon 2D projeksiyon kurulumunu tamamen değiştirmek için nasıl yapılandırılmalıdır?

Yanıtlar:


12

OpenGL ES 2.X motorumda, CPU Tarafındaki MVP matrisini (Model Görünümü Projeksiyonu) hesaplıyorum ve tepe gölgeleyicisine enjekte ediyorum.

Dik projeksiyon 4 * 4 bir matristir . Ben MVP var, ben ile vertex shader enjekte:

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

MMvp CPU tarafındaki matrisim 4 * 4'tür. GetUniformLocation, program gölgelendiricisini yükledikten sonra yalnızca bir kez yapılabilir.

Köşe gölgelendirici örneği:

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

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

Gl_Position, önceden tanımlanmış özel bir değişkendir. Köşenin konumunu içermelidir.

Parça gölgelendirici örneği. Her nokta çizmek için, son renk "gl_FragColor" hesaplanmalıdır:

#ifdef GL_ES
precision highp float;
#endif

void main(void)
{
   gl_FragColor = vColor;
}

Bu program, her köşe için tanımlanan renklerin düzeltilmesiyle bir üçgen çizer.

Daha iyi bir eğitim için bu harika belgeye bakın.


Merhaba Ellis, bu mükemmel ve eksiksiz bir cevap. Çok teşekkür ederim. Saygılarımızla.
— Bunkai.Satori

9

GlOrtho doc'den, değiştirilen değerlerle:

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

Bu matrisi üniform bir şekilde saklayın ve daha sonra gelen tepe konumlarınıza uygulayabilirsiniz (yani, M. v ürününü yapın).


Sevgili Bahbar, Cevabınız için teşekkür ederim. Temel olarak, ES2.0'da farklı bir şey yoktur, sadece manuel olarak glOrtho () matris değişimini oluşturur.
— Bunkai.Satori

@ Bunkai.Satori: Peki, tipik olarak biraz daha fazlası var, GL bir üniformaya bir model görünümü ve projeksiyon bileşimi yüklüyor.
— Bahbar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.