2011-09-24 7 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

지금 내 질문 : 무엇이 가능할 수 있습니까?

편집 :

-(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를 수동으로 전달하면 더 이상 결과가 나옵니다.

+0

문제가 확실하지 않지만'Math :: tan (fovy * 3.1415f/360.0);에서 추정 한 것입니다.도를 라디안으로 변환하고 있습니까? 어떤 경우에는 당신이 2의 요소를 잃어 버렸다고 생각합니다. (라디안 = 2 * pi * degrees/360) – Tom

+0

나는 FoVY의 절반을 원하기 때문입니다. – Brammie

답변

0

사용중인 템플릿에 오류가있는 것 같습니다. 컨텍스트를 만드는 기본 Open GL ES 템플릿 템플리트를 사용하면 적절한 1024 * 768 화면 크기를 얻을 수 있습니다. 문제가 해결되었습니다.

관련 문제