iPhone OpenGL模板是作弊?

时间:2010-06-07 06:32:30

标签: iphone xcode opengl-es xcode-template stretched

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不这样做呢?

1 个答案:

答案 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); 

希望能有所帮助。