1

XCodeのOpenGLテンプレートは、私が過去3時間理解しようとしてきたこの「引き伸ばされた」ビューポートの問題を解決するために不正行為をしているようです。

iPhoneの「OpenGLESアプリケーション」テンプレートでは、画面上で上下にバウンドするカラフルな正方形は、実際にはまったく正方形ではありません。

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がそのように修正しないのはなぜですか?

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 に答える