iPhone OpenGL Шаблон обманывает?
OpenGL шаблон XCode, кажется, обманывает, чтобы решить эту "растянутую" проблему области просмотра, которую я пытался понять в течение последних 3 часов.
В шаблоне iphone "Приложение OpenGL ES" цветной квадрат, который прыгает вверх и вниз по экрану, на самом деле вовсе не квадрат!
ES1Renderer.m (также файл ES2)
static const GLfloat squareVertices[] = {
-0.5f, -0.33f,
0.5f, -0.33f,
-0.5f, 0.33f,
0.5f, 0.33f,
};
Но он выглядит прямоугольным на устройстве / симуляторе из-за эффекта растяжения / сжатия не квадратного видового экрана. Я попытался исправить это, возившись с glFrustumf(), но это, похоже, не меняет соотношение сторон.
Я смог получить хороший внешний вид (не растянутый), когда я кормил glViewport() 1:1 widht:height. Но это не похоже на ответ, потому что это смещает расположение области просмотра.
Какой правильный способ исправить это растяжение и почему XCode не делает это таким образом?
1 ответ
Я думаю, что ответ:
XCode обманывает так, чтобы не путать нас с дополнительным кодом, необходимым для настройки усеченного конуса.
Вот код, который я использую для его установки, и он исправил полученное мной сжатие / растяжение:
const GLfloat zNear = 0.0001, zFar = 1000.0, fieldOfView = 45.0;
GLfloat size;
size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0);
aspectRatio = (GLfloat) backingWidth / backingHeight;
glFrustumf(-size,//left
size,//right
(GLfloat)-size / aspectRatio,//bottom
(GLfloat)size / aspectRatio,//top
zNear,//zNear
zFar);//zFar
glViewport(0, 0, backingWidth, backingHeight);
Надеюсь, что это помогает кому-то.