gpt4 book ai didi

iphone - 在 OpenGLES 中处理 iPhone 方向变化

转载 作者:行者123 更新时间:2023-12-03 20:08:11 25 4
gpt4 key购买 nike

当设备方向发生变化时,我的 OpenGLES View 出现问题。我正在使用Jeff Lamarche's Xcode template .

如果设置了AutoresizeMask,则在 GLView 上调用- (void)layoutSubviews。当这种情况发生时,我正在绘制的对象就会消失。 OpenGL View 仍然部分工作,因为我可以更改背景颜色并看到变化。

如果AutoresizeMask设置, View 会旋转并且OpenGL对象仍然可见,但 View 的大小错误。

这表明 layoutSubviews 中的某些内容在多次调用时会导致问题。

这是 drawView 的一些非常基本的代码,它显示了问题

- (void)drawView:(UIView *)theView
{
Vertex3D vertex1 = Vertex3DMake(0.0, 1.0, -3.0);
Vertex3D vertex2 = Vertex3DMake(1.0, 0.0, -3.0);
Vertex3D vertex3 = Vertex3DMake(-1.0, 0.0, -3.0);
Triangle3D triangle = Triangle3DMake(vertex1, vertex2, vertex3);

glLoadIdentity();
glClearColor(0.7, 0.7, 0.7, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertexPointer(3, GL_FLOAT, 0, &triangle);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
}

当使用此代码旋转设备时,屏幕上的三角形就会消失。重新定向回纵向也不会使其重新出现。

我应该不允许 GLView 重新定向还是这是我的 OpenGL 代码中的错误?

最佳答案

如果我错了,请纠正我,但我相信在 layoutSubviews 中,您需要删除并重新创建帧缓冲区以匹配新的大小。如果你去here (我假设您已经加入了 Apple 开发者计划)并观看视频“iOS 5 上 OpenGL 的最佳实践”,演讲者谈到了旋转,之前由于性能问题建议如何使用 OpenGL 手动执行旋转,但是继续说道,现在可以通过使用内置旋转轻松处理。演讲者还提到,如果您使用 GLKView,它将代表您调整帧缓冲区的大小。

另外,我不确定你所说的“很多开发人员都遇到了这个问题”是什么意思。通过 Google 和 Stack Overflow 进行粗略搜索后,我没有发现其他人也遇到过这个问题;我怀疑您的代码可能有问题。

我还关注了 Jeff Learche 的 Xcode 模板链接,但 Xcode 4 模板的链接已损坏 - 这可能是因为它是 2011 年 5 月的。如果您的 OpenGL 需求不太大,也许只需查看 GLK 框架即可专门化?

关于iphone - 在 OpenGLES 中处理 iPhone 方向变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7312950/

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