Преобразования, кажется, работают неправильно - PullRequest
0 голосов
/ 24 сентября 2011

Хорошо, у меня странная проблема с OpenGL в ландшафтном режиме на iOS. Из того, что я прочитал в Интернете, я должен сам вращать сцену, поэтому я сделал это так:

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 голосов
/ 25 сентября 2011

Похоже, произошла ошибка в шаблоне, который я использовал. Использование шаблона Open GL ES по умолчанию для создания контекста дает мне правильный размер экрана 1024 * 768. Проблема устранена.

...