1

私は新しいゲームに取り組んでいて、ようやく主人公の動きをコーディングし始めるようになりましたが、それをどのように行うのか疑問があります。

以前、私はAllegroで2つのゲームを作成しました。フレームと画像上の位置を確立し、すべてのフレームを異なるビットマップに保存するため、スプライトシートは簡単に実装できますが、OpenGLでそれを行う必要はありません。もう少し費用がかかります。

ですから、スプライトシートをどのように保存してプログラムで使用するかを考えていましたが、アイデアは1つしかありません。

画像を読み込んでテクスチャに変換しました。アニメーション化に役立つ関数では、プログラムにすべてのテクスチャを保存するのではなく、テクスチャの一部を取得して描画するだけです。

これが最善の方法ですか?

助けてくれてありがとう。

4

3 に答える 3

3

あなたは正しい方向に進んでいます。

考慮事項:

  • ビデオカードが小さなスケールで隣接するスプライトからのテクセルに溶け込まないように、各スプライトの周囲に十分なデッドスペースを残します。
  • テクスチャの最小/マグフィルタリングを適切に設定します。ブロック状の外観にする場合は、GL_NEARESTで問題ありません。
  • ファンシーになり、テクスチャメモリを節約したい場合は、スプライトを通常のグリッドに配置する必要がある理由はありません。小さいスプライトは、テクスチャの近くに詰め込むことができます。
  • スプライトが3Dモデルからレンダリングされている場合は、モデルから別のテクスチャに法線マップとディスプレースメントマップを出力し、それらをフラグメントシェーダーに組み合わせて、すばらしいライティングとセルフシャドウを作成できます。
于 2011-06-24T03:53:25.087 に答える
1

正しいアイデアが得られました。スプライトがたくさんある場合は、それらすべてを1つの大きなテクスチャに貼り付ける方がはるかに優れています。テクスチャ座標がスプライトのフレームにインデックスを付けるテクスチャクワッドとしてスプライトを描画するだけです。いくつかの最適化を行うことができますが、それらのほとんどは、テクスチャメモリを最大限に活用し、ブレンドの問題を発生させずにスプライトを緊密にパックすることを中心に展開します。

于 2011-06-24T03:55:02.307 に答える
0

OpenGLでそれを行うのは必要ではなく、もう少しコストがかかることを私は知っています。

なぜだめですか?多数のスプライトを単一のテクスチャに配置することには、実際の欠点はありません。テクスチャ座標を変更して、テクスチャから問題の領域を選択するだけです。

于 2011-06-24T03:52:55.240 に答える