转换似乎不正常

时间:2011-09-24 18:58:18

标签: c++ ios opengl-es

好的,所以我在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会给我带来更奇怪的结果。

1 个答案:

答案 0 :(得分:0)

好像我正在使用的模板中有错误。使用默认的Open GL ES模板创建上下文的方式为我提供了适当的1024 * 768屏幕大小。问题已解决。