2009-05-21 13 views
2

私はGLPaintの例を取っ​​た...私は "PaintingView"にバックグラウンドを入れようとしているので、バックグラウンドを描画して最終的にイメージをファイルとして保存することができます.....私は失われています。iPhone:64x64よりも大きなテクスチャ?

私はPNG(512×512)をロードし、プログラムの先頭に「それをペイント」にしようと、それは代わりに、512×512の64×64として描かれています...でロードするために前に

は、私が試しましたよペインティングビューのサブビューとして表示されますが、glReadPixelsは期待どおりに機能しません(サブビューではなく、PaintingViewのみが考慮されます)。また、PaintingViewはinitWithImageとしてメソッドを持っていません...私はglReadPixelsがイメージ(と変更)で動作する必要がありますが、実際にロードするとき、テクスチャは64x64サイズを持ちません。

答えて

0

最初に、glReadPixels()は、現在のOpenGLコンテキストに関連付けられているフレームバッファだけを表示します。それはあなたが期待するピクセルを得られない理由を説明するかもしれません。

第2に、特定のピクセルサイズでレンダリングされるテクスチャはどういう意味ですか?私はテクスチャがクワッドとしてレンダリングされていると仮定し、そのクアッドのサイズはコード単位で管理するべきです。

また、テクスチャの読み込みでOpenGL errorが生成されないことを確認してください。iPhoneのテクスチャサイズの制限についてはわかりません。 512x512が範囲外であることはかなり考えられます。もちろん、glGetIntegerv()に電話し、GL_MAX_TEXTURE_SIZE定数を使用して、これを自分で調べることができます。

2

GLPaintのサンプルプロジェクトでは、ブラシを移動するときにGL_POINT_SPRITEを使用してブラシテクスチャのコピーを描画します。 iPhoneでは、glPointSizeは64x64ピクセルに制限されています。これはハードウェアの制限であり、シミュレータではもっと大きくすることができます。

GL_POINT_SPRITEメソッドを使用して背景画像を描画しようとしているようですが、それは本当に必要なものではありません。代わりに、画面いっぱいにフラットな、テクスチャボックスを描画してみてください。

ここでは、2Dボックスの頂点とtexcoordsを設定し、それを描画するOpenGLのコードのビットです:

const GLfloat verticies[] = { 
     0.0f, 0.0f, 
     1.0f, 0.0f, 
     0.0f, 1.0f, 
     1.0f, 1.0f, 
    }; 

    const GLfloat texcoords[] = { 
     0, 0, 
     1, 0, 
     0, 1, 
     1, 1, 
    }; 

    glVertexPointer(2, GL_FLOAT, 0, verticies); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glTexCoordPointer(2, GL_FLOAT, 0, texcoords); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnable(GL_TEXTURE_2D); 

    glBindTexture(GL_TEXTURE_2D, texture); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

希望に役立ちます!カメラの投影方法の設定に応じて、頂点を別々に指定する必要があることに注意してください。私の場合は、以下のコードを使用してGL_MODELVIEWを設定します。GLPaintの例がどのように機能するのかよくわかりません。

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glOrtho(0, 1.0, 0, 1.0, -1, 1);