質問

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()をいじって修正しようとしましたが、それはアスペクト比を変更しないようです。

glviewport()に1:1 widht:heightを供給したときに、見栄えが良い(伸ばされていない)物事を手に入れることができました。

このストレッチを修正する正しい方法は何ですか?Xcodeがそのようにしないのはなぜですか?

役に立ちましたか?

解決

答えは次のとおりです。

Xcodeはこのように不正行為をして、フラストムをセットアップするために必要な追加のコードと混同しないようにします。

これが私が1つをセットアップするために使用しているコードです。

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

それが誰かを助けることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top