gpt4 book ai didi

iphone - OpenGL-ES的 "in"和 "out"是什么? (从 OpenGL 移植)

转载 作者:行者123 更新时间:2023-12-03 18:20:48 26 4
gpt4 key购买 nike

似乎我能找到的所有有关 OpenGL-ES 的文档都说“OpenGL-ES 就像 OpenGL,但没有很多东西。例如,没有 glBegin 或 glEnd。”

好的,太好了。那么,还有什么是没有的呢?或者有内容的列表吗?或者也许是移植指南?

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

最佳答案

回答您的问题的部分问题是缺少很多东西,而且通常是一组很少使用或不适用的位标志。描述差异的最佳文档实际上是实现 header 。

对于我正在开发的框架,我决定使其在桌面和 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 );
}

查看 Apple 的技术说明 TN2230 "Optimizing OpenGL ES for iPhone OS"了解一些可能对移植有用的其他提示。

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

关于iphone - OpenGL-ES的 "in"和 "out"是什么? (从 OpenGL 移植),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/272970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com