Iphone 什么';s";在;及;“出去”;OpenGLES的应用?(从OpenGL移植)

Iphone 什么';s";在;及;“出去”;OpenGLES的应用?(从OpenGL移植),iphone,opengl,opengl-es,porting,Iphone,Opengl,Opengl Es,Porting,似乎我能找到的所有关于OpenGL ES的文档都有这样的含义:“OpenGL ES就像OpenGL一样,但没有很多东西。例如,没有glBegin或glEnd。” 好的,那太好了。那么,还有什么没有呢?或者有一个清单,里面有什么?或者是一个移植向导 (特别是,我正在尝试将现有的GL应用程序移动到iPhone上,尽管我不想将我的Q限制在iPhone上。)链接到from的(PDF)介绍了OpenGL ES 1.X和OpenGL 1.5之间的差异。OpenGL ES 1.1是iPhone上使用的版本 差

似乎我能找到的所有关于OpenGL ES的文档都有这样的含义:“OpenGL ES就像OpenGL一样,但没有很多东西。例如,没有glBegin或glEnd。”

好的,那太好了。那么,还有什么没有呢?或者有一个清单,里面有什么?或者是一个移植向导

(特别是,我正在尝试将现有的GL应用程序移动到iPhone上,尽管我不想将我的Q限制在iPhone上。)

链接到from的(PDF)介绍了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/
系统/库/框架/OpenGLES.framework/Headers/ES1/gl.h

并将其与

/Developer/SDKs/MacOSX10.5.sdk/
系统/库/框架/OpenGL.framework/Versions/A/Headers/gl.h

这些标题非常简单易懂

到目前为止,我发现的主要区别是没有GLdouble(任何使用GLdouble的东西,比如glOrtho和glFrustum,都有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 );
}
查看苹果的技术说明,了解一些在移植中可能有用的其他提示


到目前为止,移植对我来说是相当轻松的,除非你的应用程序做了一些非常高级的OGL东西或使用完全不受支持的功能,否则你会通过点击build按钮来发现你的问题,通过在gl.h文件中挖掘一点,一个简单的修复将显而易见。事实上,移植到ES会迫使您编写良好的优化渲染代码。

好的,这是可行的。抱歉,我是ES新手,在发布问题(哦!)后才找到Khronos网站。有趣的是:我似乎在任何地方都找不到那个技术说明。有什么想法吗?这是直接链接,不过你显然需要iPhone开发者访问(免费)。没有——苹果(典型地)只是从外观上删除了该页面(