0

iPhoneで画像ストレッチ効果を作ろうとしています。頂点配列を作成し、背景画像の任意の半径内の各インデックスのテクスチャデータをシフトします。次に、次の呼び出しを行って表示します。

int n = gridSize_.x * gridSize_.y;
glEnableClientState( GL_VERTEX_ARRAY);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texCoordinates);
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices);

//if(num_myindices > 0)
// glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT, myindices);
glDisableClientState(GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY );

私の問題は、引き伸ばされた領域の端が32x32や64x64のような比較的小さなグリッドサイズで非常に途切れ途切れに見えることです。大きくするとスムーズになりますが、はるかに遅くなります。

そこで、背景画像のコピーを追加して、頂点配列を影響を受けるインデックスのみに制限してみました。私ははるかに小さいグリッドサイズを使用しますが、より小さな領域に使用します。上記の描画コードは次のようになります。

//glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices);
if(num_myindices > 0)
glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT,myindices);

影響を受けた領域は表示されますが、背景画像が点滅して消えるように見えます。引き伸ばされた領域は黒い背景に浮かんでいます。明らかに、私の背景が最初にレンダリングされ、次に上記のコードが頂点配列のデータのみを上書きしてレンダリングします。

画像の描画を効率的に組み合わせる方法について誰かアドバイスがありますか?

背景用に2番目の単純な頂点配列を作成し、ifステートメントの直前にglDrawArrayを呼び出して、すべての描画が1つのメソッドで行われるようにする予定です。これはこれについて行く正しい方法ですか?もっと良い方法はありますか?どういうわけか、すべての画像データを1つの単純な頂点配列に結合する必要がありますか?

4

1 に答える 1

0

プリミティブの1つのセットに背景を描画します。

カメラに近い、プリミティブの2番目のセットに「エンチャント」を描画します(正射影を使用する場合は、1次元の値を変更する素材)。

背景が点滅して消える理由は言えません。多くの理由が考えられます。openglの状態を正しくクリアするのを忘れた、深度の競合、またはその他の多数のバグがあります。

しかし、異なる「平面」上の異なるジオメトリのセットに重なり合う画像を描画することに固執する場合は、必要な効果が得られるはずです。

于 2011-08-20T16:06:14.787 に答える