2010-11-30 34 views
3

我正在移植我在C++和iPhone上使用OpenGL/ES制作的现有跨平台程序。请记住我对Objective-C没有任何了解...如何旋转OpenGL以适应iPhone横向模式?

我刚刚简单地编辑了其中一个教程的Objective-C文件,以便为iPhone正确初始化OpenGL,并简单地调用我的C++ multi - 其他任何平台的代码。

我的程序只能在横向模式下运行,这就是为什么我将它设置为唯一支持的接口方向(在info.plist文件中)。

我想知道的是我应该如何让OpenGL根据风景模式旋转。目前我已经添加了一个glRotate,在拖动之前完成它,但这是一个肮脏的伎俩。另一件事:我尝试将触摸转换成与另一种快速方法相当的鼠标点击坐标,并且我得到一个点位于X轴80像素和Y轴80像素的距离。我添加了另一个脏修复(与GlTranslatef)到这个混乱,我得到正确的坐标,除了...颜色选择被打破。

要清楚的是,颜色选择不会检测到左侧160个第一像素上的任何内容(这是2 * 80和480 - 320,所以,99%的机会是由我的脏代码引起的。 )

处理这个问题的正确方法是什么?

回答

1

您不应该在横向模式下使用OpenGL。我怀疑你实际上并没有进入横向模式。您需要在您的视图控制器覆盖shouldAutoRotateToInterfaceOrientation:

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

要验证它的工作,把一些随机的控制(例如,空按钮)在您的视图的角落,与界面生成器在横向模式下,看哪里他们弹出。

+3

相似的想法:`return UIInterfaceOrientationIsLandscape(interfaceOrientation);` – Douglas 2010-11-30 23:10:46

+0

+1 @Douglas:我不知道那个。 – 2010-12-01 00:05:55

0

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