XCode的OpenGL模板似乎在试图解决我在过去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()来修复它,但这似乎并没有改变宽高比。
当我用1:1 widht:height喂glViewport()时,我能够让事情看起来很好(未拉伸)但这似乎不是答案,因为它会偏移视口位置。
纠正这种拉伸的正确方法是什么?为什么XCode不这样做呢?
答案 0 :(得分:3)
我认为答案是:
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);
希望能有所帮助。