0

iOS で OpenGL を使用して、(各ピクセルを個別に設定することにより) 小さなテクスチャを更新し、それを拡大して画面全体 (毎秒 60 フレーム) に合わせることができますか?

4

2 に答える 2

1

glTexImage2D を使用してテクスチャのコンテンツを更新できるはずです。

テストされていない例:

GLubyte data[1024]; // 32x32 (power of two) 
for (int i=0; i<1024; i+=4) {
    // write a red pixel  (RGBA)    
    data[i] = 255;
    data[i+1] = 0;
    data[i+2] = 0;
    data[i+3] = 255;
}

glBindTexture(GL_TEXTURE_2D, my_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

// then simply render a quad with this texture.
于 2013-07-19T17:55:30.507 に答える
1

一般的に、答えはイエスです。可能です。ただし、何を描く必要があるかによって異なる場合があります。

詳細を提供しないため、一般的なアプローチについて説明します。

  • テクスチャをフレームバッファにバインドします (これを行う方法については、コード付きの適切な説明があります。「例 6.10. スーパーサンプリングのための Initialize()」のコード例を参照してください) 。

  • 画面上と同じ方法で必要なものを描画します (変換、モデルビュー マトリックスなど)。(すべてのピクセルを変更するために) ピクセル精度が必要な場合は、正投影の使用を検討してください。これが可能かどうかは、何を描く必要があるかによって異なります。この描画はすべてテクスチャで実行され、「テクスチャの更新」部分を実現します。

  • 画面に描画するために使用する通常のフレームバッファをバインドします。前の手順のテクスチャを使用する四角形を描画します (正投影を再度使用する可能性があります)。この四角形を拡大縮小して画面いっぱいに表示できます。

上記のアプローチで 60 fps を達成できるかどうかは、ターゲット デバイスとレンダリングする必要があるシーンによって異なります。

それが役立つことを願っています

于 2013-07-18T09:08:01.480 に答える