18

OpenGL-ES について私が見つけることができるすべてのドキュメントは、「OpenGL-ES は OpenGL に似ていますが、多くのものはありません。たとえば、glBegin や glEnd はありません」という趣旨のことを言っているようです。

わかりました、それは素晴らしいです。それで、他にないものは何ですか?または、何が入っているかのリストはありますか?それとも移植ガイド?

(具体的には、既存の GL アプリを iPhone に移行しようとしていますが、必ずしも Q を iPhone に限定したくはありません。)

4

2 に答える 2

14

あなたの質問に答える際の問題の一部は、多くのものが欠けていることであり、多くの場合、めったに使用されない、または適用できないビット フラグのセットです。違いを説明する最良のドキュメントは、実際には実装ヘッダーです。

私が取り組んでいるフレームワークについては、デスクトップと iPhone の間で完全にクロス プラットフォームにすることにしました。それを理解するために私が取ったアプローチは、OpenGL でコードを書き、それがどこで壊れているかを確認することです。次に、中を見てください

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/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「Optimizing OpenGL ES for iPhone OS」を参照してください。

これまでの移植は、私にとってはかなり楽でした。アプリがかなり高度な OGL を実行したり、完全にサポートされていない機能を使用したりしない限り、ビルド ボタンを押すことで問題を見つけることができます。 gl.h ファイル。実際、ES への移植は、適切に最適化されたレンダリング コードを作成することを強制します。

于 2009-01-07T19:57:37.620 に答える
13

Khronos.orgのOpenGL ES 1.X 情報ページからリンクされている「OpenGL ES 1.1.12 Difference Specification」 (PDF)では、OpenGL ES 1.X と OpenGL 1.5 の違いについて説明しています。OpenGL ES 1.1 は、iPhone で使用されるバージョンです。

違いの仕様は、私が今まで見た中で最も単純なドキュメントではありませんが、一般的に OpenGL 仕様よりも読みやすいです。呼び出す OpenGL 関数のリストを取得し、差分ドキュメントを検索することをお勧めします。それらが OpenGL ES でサポートされているかどうかが表示されます。サポートが部分的である場合は、完全な仕様で詳細を確認できます。

于 2008-11-07T20:43:50.790 に答える