좋아, 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까지의 모든 좌표가 실제로 내 화면에있는 것은 아닙니다! 내가 의미하는 바를 보여주는 스크린 샷입니다.
지금 내 질문 : 무엇이 가능할 수 있습니까?
편집 :
-(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;
}
뷰의 크기가 갑자기 1568 * 1216로 밝혀졌다 : 좀 더 조사 후, 난이 방법-C에서의 obj에하였습니다. 문제는 아마도 거기에 있습니다. onSurfaceChanged에 768 * 1024를 수동으로 전달하면 더 이상 결과가 나옵니다.
문제가 확실하지 않지만'Math :: tan (fovy * 3.1415f/360.0);에서 추정 한 것입니다.도를 라디안으로 변환하고 있습니까? 어떤 경우에는 당신이 2의 요소를 잃어 버렸다고 생각합니다. (라디안 = 2 * pi * degrees/360) – Tom
나는 FoVY의 절반을 원하기 때문입니다. – Brammie