2011-09-24 169 views
0

好吧,所以我在iOS上使用横向模式的OpenGL出现了一个奇怪的问题。 从我在互联网上阅读我有旋转现场自己,所以我做了这样的:转换似乎无法正常工作

void GameViewController::onSurfaceChanged(int width, int height) 
{ 
float aspect = (float)width/(float)height; 
float fovy = 90.0f; 

glMatrixMode(GL_PROJECTION); 

float xmin, xmax, ymin, ymax; 
ymax = 0.01f * Math::tan(fovy * 3.1415f/360.0); 
ymin = -ymax; 
xmin = ymin * aspect; 
xmax = ymax * aspect; 

glViewport(0, 0, width, height); 

glLoadIdentity(); 
glRotatef(-90.0f, 0.0f, 0.0f, 1.0f); 
glFrustumf(xmin, xmax, ymin, ymax, 0.01f, 320.0f); 
} 

我的我的相机的中心不在画面中央,现在虽然。所以我重置所有矩阵(投影,模型视图),以便它们都是标识,然后在屏幕上绘制了一个单位圆。现在我看到出了什么问题,并不是所有-1到1的坐标都在我的屏幕上!下面是一个屏幕截图,以显示我的意思: circle that should be in the center of the screen

现在我的问题:什么可能导致这种情况?

编辑:经过一番深入调查,我发现,在这个OBJ-C方法:

-(void)setupView:(GLView*)view 
{ 
CGRect rect = view.bounds; 
glViewport(0, 0, rect.size.width, rect.size.height); 

gameView->onSurfaceCreated(); 
gameView->onSurfaceChanged(rect.size.width, rect.size.height); 

view.multipleTouchEnabled = YES; 
} 

视图的大小突然竟然是1216 * 1568。问题可能在那里。手动将768 * 1024传递给onSurfaceChanged给了我更多的结果。

+0

不知道你的问题,但我相信,在'数学::棕褐色(fovy * 3.1415f/360.0);'你是从度转换成弧度?在这种情况下,我认为你错过了一个因子2.(弧度= 2 * pi *度/ 360) – Tom

+0

这是因为我想要一半的FoVY – Brammie

回答

0

似乎在我使用的模板中有错误。使用默认的Open GL ES模板创建上下文的方式为我提供了正确的1024 * 768屏幕大小。问题已修复。

相关问题