2008-11-07 15 views
17

OpenGL-ES ile ilgili bulabildiğim tüm belgelerin "OpenGL-ES'nin tıpkı OpenGL gibi bir şeyden çok şey ifade etmediğini söylediği görülüyor. Örneğin, glBegin veya glEnd."OpenGL-ES'nin "in" ve "out" nedir? (OpenGL'den bağlantı)

Tamam, bu harika. Yani, hangi ELSE hiç yok? Ya da içinde nedir? Ya da belki bir kılavuz mu?

(Özellikle, ben ille iPhone benim Q sınırlamak istemiyoruz rağmen, iPhone için varolan GL uygulamayı taşımak için çalışıyorum.)

cevap

12

"OpenGL ES 1.1.12 Difference Specification" (PDF) the OpenGL ES 1.X info page at Khronos.org bağlantı verildiğini OpenGL ES 1.X ve OpenGL 1.5 arasındaki farklar geçer. OpenGL ES 1.1, iPhone'da kullanılan sürümüdür.

Fark belirtimi, gördüğüm en basit belge değil, genel olarak OpenGL özelliklerinden daha kolay okunabiliyor. Aradığınız OpenGL işlevlerinin bir listesini almanızı ve sonra bunlar için fark belgesini aramanızı öneririm. OpenGL ES'de desteklenip desteklenmediklerini size gösterecek ve eğer destek sadece kısmi ise, daha fazla bilgi için tam spesifikasyona gidebilirsiniz.

+0

Tamam, işe yarıyor. Üzgünüz, ES için yeni ve Khronos sitesini bulamadı soruyu yayınlayana kadar (d'oh!) – Olie

13

Sorunuzu yanıtlarken sorunun bir kısmı eksik olan çok şey var ve çoğu zaman nadiren kullanılan veya uygulanamayan bit bayrakları kümesidir. Farklılıkları açıklayan en iyi belge, aslında uygulama başlığıdır.

Üzerinde çalıştığım çerçeve için masaüstü ve iPhone arasında tamamen çapraz bir platform oluşturmaya karar verdim. Anladığım kadarıyla yaklaştığım yaklaşım OpenGL'de kod yazıyor ve nerede kırıldığını görüyor. Sonra

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h

bakmak ve bu başlıklar çok basit ve takip edilmesi kolay olan

/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h

karşılaştırın. Şimdiye kadar keşfettiğim en önemli fark GLdouble olmadığıdır (glOrtho ve glFrustum gibi GLdouble kullanan bir GLFloat versiyonu glOrthof ve glFrustumf vardır). Ayrıca, herhangi bir nedenle gluPerspective veya gluPerspectivef yoktur. Eğer hiçbir glBegin ve glEnd sahip olduğundan, glDrawArray veya glDrawElements (tercih) aracılığıyla her şeyi yapmak zorunda

void gluPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar) 
{ 
    GLfloat xmin, xmax, ymin, ymax; 

    ymax = zNear * tan(fovy * M_PI/360.0); 
    ymin = -ymax; 
    xmin = ymin * aspect; 
    xmax = ymax * aspect; 

    glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar); 
} 

: Burada

yerine bir damladır. Hızlı ve kirli örnek:

void draw(short x, short y, short w, short h) 
{ 
    const GLshort t[8] = { 0, 0, 1, 0, 1, 1, 0, 1 }; 
    const GLshort v[8] = { x, y, x+w, y, x+w, y+h, x, y+h }; 

    glVertexPointer(2, GL_SHORT, 0, v); 
    glEnableClientState(GL_VERTEX_ARRAY); 

    glTexCoordPointer(2, GL_SHORT, 0, t); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

    glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 
} 

Kontrol dışarı taşıma yaralı olabilecek diğer bazı ipuçları için Apple'ın Teknik Not TN2230 "Optimizing OpenGL ES for iPhone OS".

Şu ana kadar benim için oldukça rahatsız edici bir durum oldu ve uygulamanız oldukça ileri düzeyde OGL işleri yapmıyorsa veya tamamen desteklenmeyen işlevler kullanmıyorsa, derleme düğmesine basarak sorunlarınızı bulabilir ve basit bir düzeltme kazma yoluyla görünür olacaktır gl.h dosyalarında biraz. Aslında, iyi bir hale getirilmiş işleme kodu yazmanız için ES tür kuvvetlerine başvurmak.

+0

İlginç: Bu teknoloji notunu her yerde göremiyorum.Herhangi bir fikir? – cbrulak

+0

İşte size doğrudan bağlantı, iPhone Developer erişimine (ücretsiz) ihtiyaç duyacaktır. http://developer.apple.com/iphone/library/technotes/tn2008/tn2230.html –

+0

Nope - Apple'ın (karakteristik olarak) sayfadaki şeyleri görerek kolayca sildiğini görebilirsiniz. :( – Adam