2012-01-31 21 views
2

OpenGLを使用した単純な2D格闘ゲームを開発しようとしていますが、私はキャラクターアニメーションに固執しています。基本的な考え方は、2つの三角形からなる四角形を作成し、この四角形のテクスチャをフレームごとに変更することです。フレームを格納するためにスプライトシートを使用していますが、今はそれらを循環させる最も便利な方法を見つけようとしています。頂点座標およびテクスチャ座標は、GL_STATIC_DRAWパラメータを使用して、GPUメモリの頂点バッファオブジェクトに格納されます。スプライトシートとOpenGLを使用した2Dスプライトアニメーション

最初のアイデアは、単一のOpenGLテクスチャ(glGenTextures(1, &texture);)にSOILような外部ライブラリを使用して、スプライトシートをロードし、その後、頂点シェーダフレームごとに渡されるクワッドのテクスチャ座標を変更することで、もしそうアニメーションは4フレームで、テクスチャのS座標を0.0,0.25,0.50.75に変更し、0.0に戻しました。しかし、それは私がかなり頻繁に私のVBOを変更しなければならないことを意味し、私はそれがかなり高価かもしれないと思った。

glGenTextures(nFrames, &textureArray[0]);を使用してテクスチャの配列を割り当て、各配列positionmに1つのフレームを格納し、glBindTexture(GL_TEXTURE_2D, textureArray[currFrame]);を使用して、VBOを変更せずに異なるテクスチャを適用します。しかし、私はスプライトシートをいくつかの画像に分割したくないので、SOILのようなライブラリを使ってこれを達成する方法は考えられません。

この場合、最も便利な方法は何ですか?私はいくつかの可能性を評価したいので、コードを提供しませんでした。

答えて

1

最初に説明したのと同じ方法でやります。関心のある部分を表示するようにテクスチャの座標を変更します。私は高価であるかどうかはわかりませんが、シェーダを使用してVBOを変更することは、非常に効果的で費用がかかりません。 「最適化する」というルールを考慮すると、後でそれをやり直すことは非常に簡単です。それがうまく設計された方法でそれをやったならば。

しかし、テクスチャのSコードを変更する方が、いくつかの異なるテクスチャを交換するよりも速いと思います。

+0

私はこれも最善の方法だと思っています。私はすでにこの方向に取り組んでいます。ありがとう。 –

関連する問題