何が“で”および“ out” OpenGL-ESの? (OpenGLからの移植)
質問
OpenGL-ESに関するすべてのドキュメントには、" OpenGL-ESの効果に関する何かがOpenGLに似ていますが、多くのものはありません。たとえば、glBeginやglEndはありません。
OK、それは素晴らしい。では、どのELSEが存在しないのでしょうか?または、 in のリストがありますか?それとも移植ガイドですか?
(具体的には、既存のGLアプリをiPhoneに移動しようとしていますが、必ずしもQをiPhoneに制限する必要はありません。)
解決
" OpenGL ES 1.1.12差分仕様" (PDF) Khronos.orgのOpenGL ES 1.X情報ページ OpenGL ES 1.XとOpenGL 1.5の違いについて説明します。 OpenGL ES 1.1は、iPhoneで使用されるバージョンです。
差分仕様は、私がこれまで見た中で最も単純な文書ではありませんが、一般的なOpenGL仕様よりも読みやすいです。呼び出すOpenGL関数のリストを取得してから、それらの差分ドキュメントを検索することをお勧めします。 OpenGL ESでサポートされているかどうかが表示されます。サポートが部分的である場合は、詳細について完全な仕様にアクセスできます。
他のヒント
あなたの質問に答える際の問題の一部は、多くのものが欠けていることであり、多くの場合、それはめったに使用されないか適用できないビットフラグのセットです。違いを説明する最適なドキュメントは、実際には実装ヘッダーです。
私が取り組んでいるフレームワークでは、デスクトップとiPhoneの間で完全にクロスプラットフォームにすることを決めました。私がそれを理解する際に取るアプローチは、OpenGLでコードを記述し、どこで壊れるのかを確認することです。次に
を見てください /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/
システム/ライブラリ/Frameworks/OpenGLES.framework/Headers/ES1/gl.h
およびそれを比較
/Developer/SDKs/MacOSX10.5.sdk/
System / Library / Frameworks / OpenGL.framework / Versions / A / Headers / gl.h
これらのヘッダーは非常に単純でわかりやすいです。
これまでに発見した主な違いは、GLdoubleがないことです(glOrthoやglFrustumなどのGLdoubleを使用するものには、GLfloatバージョンglOrthofとglFrustumfがあります)。また、何らかの理由でgluPerspectiveもgluPerspectivefもありません。
代替品のドロップ:
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 );
}
glBeginとglEndがないため、glDrawArrayまたはglDrawElements(推奨)を使用してすべてを行う必要があります。簡単で汚い例:
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 );
}
Appleのテクニカルノート TN2230" OpenGL ES for iPhone OSの最適化&quot ; 移植に役立つその他のヒントについて。
これまでの移植はかなり苦痛を感じませんでした。アプリでかなり高度なOGLを実行したり、完全にサポートされていない機能を使用したりしない限り、ビルドボタンを押すと問題が見つかります。 gl.hファイルには少し。実際、ESに移植すると、最適化された適切なレンダリングコードを書く必要があります。