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.