Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 转换似乎工作不正常_C++_Ios_Opengl Es - Fatal编程技术网

C++ 转换似乎工作不正常

C++ 转换似乎工作不正常,c++,ios,opengl-es,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

好的,我在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的坐标都在我的屏幕上!下面是一个屏幕截图,显示我的意思:

现在我的问题是:这可能是什么原因

编辑:经过进一步调查,我发现在这种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会得到更奇怪的结果。

我使用的模板似乎有错误。使用默认的OpenGL ES模板创建上下文的方式可以获得正确的1024*768屏幕大小。问题解决。

不确定你的问题,但我认为在数学中::tanfovy*3.1415f/360.0;您正在从度转换为弧度?在这种情况下,我认为你缺少一个因子2。弧度=2*pi*degrees/360这是因为我想要一半的FoVY