2

私はGLPaintの例を取り上げました...「PaintingView」に背景を入れようとしているので、背景の上に描画して、最終的に画像をファイルとして保存できます.....私は迷っています。

PNG (512x512) を読み込んで、プログラムの最初で「ペイント」しようとしましたが、512x512 ではなく 64x64 としてペイントされました...

前に、ペイント ビューのサブビューとしてロードしようとしましたが、glReadPixels が期待どおりに機能しません (サブビューではなく、PaintingView のみが考慮されます)。また、PaintingView には initWithImage のようなメソッドがありません... 画像 (および変更) で glReadPixels が機能する必要がありますが、ロード時にテクスチャのサイズが 64x64 になる理由が本当にわかりません..

4

2 に答える 2

2

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

GL_POINT_SPRITE メソッドを使用して背景画像を描画しようとしているようですが、それは実際には望んでいるものではありません。代わりに、画面いっぱいに平らなテクスチャ付きのボックスを描いてみてください。

以下は、2D ボックスの頂点とテクスチャ座標を設定して描画する 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);
于 2009-06-05T19:03:34.250 に答える