如何旋转OpenGL以适应iPhone横向模式?

3
我正在移植一款我用C++和OpenGL/ES制作的跨平台程序到iPhone上。请注意,我对Objective-C一无所知...
我只是简要编辑了其中一个教程的Objective-C文件,以适当地初始化OpenGL,并为其他所有内容调用我的C++跨平台代码。
我的程序只能在横屏模式下运行,这就是为什么我将其设置为唯一支持的界面方向(在info.plist文件中)的原因。
我想知道的是,如何告诉OpenGL根据横屏模式旋转。目前,我添加了一个glRotate在绘制之前进行旋转,但这是个不好的做法。
另一件事:我试图将触摸转换为等效的鼠标点击坐标,使用另一种快速方法,我获得一个位于X轴80像素和Y轴80像素处的点。我又添加了另一个不好的修复(使用GlTranslatef)来解决这个问题,我获得了正确的坐标,但...颜色选择功能出现了问题。
明确一下,颜色选择在左侧的前160个像素上没有检测到任何东西(这是2 * 80和480-320,所以,嗯,99%的可能性是由于我的不好的代码引起的...)
处理这个问题的正确方法是什么?
2个回答

1

使用OpenGL在横屏模式下不需要做任何事情。我怀疑你实际上并没有进入横屏模式。你需要在你的视图控制器中重写shouldAutoRotateToInterfaceOrientation:方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return orientation == UIInterfaceOrientationLandscapeLeft; // Or ...Right
}

为了验证它是否正常工作,请在您的视图的角落中使用一些随机控件(例如,空按钮),并在Interface Builder中使用横向模式,看看它们弹出的位置。

3
相似的想法:return UIInterfaceOrientationIsLandscape(interfaceOrientation); - Douglas

0
在 iPhone 3G 上,这是一个不好的想法。使用 shouldAutoRotateToInterfaceOrientation 进行旋转会使用 OpenGL 硬件执行此操作,因此最好在您的 OpenGL 代码中使用旋转。如果没有性能问题,请保持简单。

通常使用硬件执行操作是一个更好的想法...那么问题在哪里?iPhone 3G上没有这样的硬件,也没有自动切换到软件替代方案吗? - teupoui
是的,但它大量使用GPU。在3G上你失去了20帧每秒。这是一个非常已知的问题。 - Ellis
要进行这个操作,GPU必须重新渲染表面并使用填充率。在一些安卓手机上也存在同样的问题。我不知道在IOS 3和4上是否已经进行了优化。 - Ellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接