1

XCode 的 OpenGL 模板似乎在解决这个我在过去 3 小时里一直试图理解的“拉伸”视口问题。

在iphone“OpenGL ES Application”模板中,在屏幕上上下弹跳的彩色方块根本就不是真正的方块!

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 的宽度:高度喂给 glViewport() 时,我能够让事情看起来不错(没有拉伸)。但这似乎不是答案,因为它抵消了视口的位置。

纠正这种拉伸的正确方法是什么,为什么 XCode 不这样做?

4

1 回答 1

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

希望对某人有所帮助。

于 2010-06-08T08:54:51.530 回答