OpenGLは2Dゲームに適していますか?


44

私はしばらくの間OpenGLライブラリを自分で教えてきましたが、ゲームを作り始めたいです。ただし、簡単に紹介するために、トップダウンポケモンスタイルのゲームなど、2Dのものから始めたいと思います。

これは良い計画ですか、それともOpenGLは3D専用に作られていますか?



OpenGL for 2Dを使用する利点の1つは、シェーダーの利点が得られることだと思います。これらは、特殊効果を達成するのに役立ちます。もう1つの利点は、OpenGLを既に知っている場合、APIに精通していることです。
リソル14

回答:


44

OpenGLは2Dゲームに非常に適しています。通常は3Dで使用されますが、2Dゲームでも同じ機能を使用できます。つまり、3D OpenGLでできることはすべて、「2D」OpenGLでも適用できます。

この場所には、さらに詳しい情報があります

2D OpenGLは、3D OpenGLと同じ方法で実現されます。2D OpenGLはテクニックのアプリケーションです。つまり、シーンを平らな平面にレンダリングし、設定に応じてシーンを歪める透視投影ではなく正投影を使用します。

例:

オルソvsパースペクティブ

(a)は正射投影のシーンです。(b)は、透視投影を使用した同じシーンです。2Dゲームでは、深度が変更されると、スプライトの位置がずれることがあります(開発の進め方にもよりますが)。透視投影を使用すると、画面座標での位置合わせがより難しくなります。

さらに、OpenGLには多くの利点があります。主に、ハードウェアアクセラレーションは大きなプラスです。また、グラフィックカードの機能とその処理方法をより細かく制御できるため、ケース固有の最適化が可能です。


どうもありがとうございました!これでいいのか確認したかっただけです。
w4etwetewtwet

4
OpenGLを2Dに使用する適性と関心がある場合、OpenGLのみが提供できる多くの報酬をもたらします。驚異的なパフォーマンス、クロスプラットフォームの互換性...このように考えてください。とにかく、2Dの他のほとんどすべて選択肢 OpenGLの上に構築さます。それはいくつかの「中間者」をカットする絶好の機会です
スティーブンルー

2
@StevenLuと言うまでもなく、もう少し本物のプログラマーです
-Outurnate

読んでください!リンクしてくれてありがとう。うん:まっすぐなOpenGLで2Dをコーディングするのはもっと悪いことなので、そうする必要があるのです。
スティーブンルー

1
リンクだけでなく、この回答にもっと情報を提供する必要があります。GLが2D(正投影ビュー)で機能する理由と、GLがもたらす利点(ハードウェアアクセラレーション、シェーダーエフェクト)を説明することができます。
ショーンミドルディッチ

22

名前が示すOpenGLはグラフィックライブラリです。3Dを念頭に置いて開発されていますが、ライブラリには3Dを使用するというハードコーディングされた仮定はありません。さらに、3Dの機能のおかげで、厳密に2Dのアプローチでは困難ないくつかのことが簡単になります。例:

  • Zソートは、深度バッファーの3D座標を使用することで簡素化されます(ただし、透明度に注意してください)
  • 解像度に依存しないテクスチャ付きクワッドを使用しているため、スプライトの回転とスケーリングは基本的に無料です
  • OpenGL 2.0対応のグラフィックスカードに制限したい場合は、シェーダーを利用できます。これにより、特殊効果(ブラー、パーティクルエフェクト、画像操作、色置換)の記述が大幅に簡素化されます。 CPU側よりもはるかに高速

これは私の頭の上からもたらされるいくつかの利点に過ぎません、他にもいくつかあると思います。


3
OpenGL 2.0(またはそれ以上)対応のグラフィックスカードに限定してください。OpenGL2.0は2004年にリリースされましたが、それでもかなり古くなっています。
スライスパン

@Slicedpan、残念ながら一部のラップトップ/ネットブックにはGL 1.4の最大サポートを備えたIntelカードが付属しています-個人的にはそれらを捨てることにしましたが、一部の人々(特に単純なゲームを作成する場合)はそれらをサポートしたいかもしれません。
コーネルKisielewicz

16

OpenGLは3D APIですが、それでも2Dゲームを作成するために使用できます。データを飛行機に拘束するなど、さまざまな手法を使用して、2D環境を3Dで偽造できます。

ただし、これを明白な方法で実行するための実際のAPIのサポートは限られています(たとえば、「2Dモードをオンにする」機能はありません)。それをシミュレートする方法(オンラインの多くのチュートリアルで見つけることができます)は、実際に内部で使用されている3Dパイプラインをある程度理解しないと、完全に理解するのが難しい場合があります。

OpenGLをしばらく見てきたようで、おそらくそれらの基礎を十分に把握しているようです。ただし、それらに不安がある場合は、cocos2dなど、OpenGLの上に構築された2Dライブラリを使用してゲームを開始することをお勧めします。2D APIが一般的にどのように見えるかについての経験を提供し、ハードウェアアクセラレートされた3Dバックエンドの利点を享受できます。



5

SDLSFMLなどの2Dグラフィックライブラリの多くは、OpenGLハードウェアアクセラレーションを利用しています。これにより、OpenGLのパフォーマンス上の利点が得られますが、より単純なAPIの背後にある厄介な低レベルの詳細が抽象化されます。


0

私は現在、OpenGlプログラミングで多くの経験を積んでおり、それが苦痛であると言えます。プログラミングを始めたとき、私はBlitzBasicのような単純な環境で非常に生産的でした。その後、C ++とOpenGlを学ぶことで次のステップに進みました。そして、あなたに良い先生や頼む人がいないとき、あなたは永久に黒い画面にぶつかるでしょう。最大の問題は、OpenGlの地獄です。openglの状態を変更するために交換できる多数のスイッチがあります。また、一部のスイッチは他のスイッチに依存しています。たとえば、glGet(GL_TEXTURE_BINDING_2D)はglGet(GL_ACTIVE_TEXTURE)に依存しています。また、状態を示すドキュメントは、他のどの状態が最適でないかによって異なります。テクスチャの読み込みなどの多くの操作では、この状態を変更する必要があり、古い状態を必要とする他のコードが破損することが非常に多くあります。そして、OpenGlが実装依存の動作としてこの問題があるため、プログラムはあなたのマシン上で実行されますが、他のマシン上ではすべてが表示されます。ここでできることは、10000行のコードのどこが悪いのかを推測することです。欲求不満が好きなら、OpenGlを2Dに使用してください。他のすべての人には、必要ない場合はやらないでください。OpenGlで生産性を高めることができますが、多くの時間と神経がかかります。おそらくあなたが使いたい以上のもの。OpenGlで生産性を高めることができますが、多くの時間と神経がかかります。おそらくあなたが使いたい以上のもの。OpenGlで生産性を高めることができますが、多くの時間と神経がかかります。おそらくあなたが使いたい以上のもの。


-2

Unity3DはOpenGLを使用しており、2Dおよび2.5Dプラットフォーム向けに使用しています。Unity3Dは基本的に3Dゲームエンジンですが、2Dおよび2.5Dゲームにも使用されます。x、y、zプレーンを使用して、移動または回転をこれらのプレーンのうち2つに制限し、本質的に3Dワールドで2D雰囲気を作成できます。


素晴らしい、私の最初のdownvote。gamedevを見てうれしいのも嫌いです。
アポロソフトウェア

1
実世界の例を介してポイントを説明することは嫌われていると思います。とてもプロフェッショナル。
アポロソフトウェア

7
確かに、ダウン票は「嫌悪」を示すものではありません。Downvotesは、コミュニティが質問と回答に対する意見を伝えるための単なる方法です。それはあなたにとって個人的なものではないので、そのように受け取らないようにしてください。あなたはフィードバックなしで答えを改善する方法がわからないので、私はダウンボーターがダウンボートの理由についてコメントすべきだったことに同意します。なぜそれがダウン投票されたと思うのかを説明します。1人の個人が2DゲームにOpenGLを使用しているからといって、全体として適切であるとは限りません。またそれが適切である理由についても理由を示す必要があります。
マイケルハウス

2
ええ、なぜ人々が投票しているのかわかりません。「OpenGLを使用する」ビットは「それを必要とするプラットフォームでOpenGLを使用する」(iOS / Anrdoid / OSX / Linuxを除くすべての場所でDirect3Dまたはコンソール固有のAPIを使用する)で明確にすべきですが、それは修正というよりも明確です。
ショーンミドルディッチ

1
私は自分自身を支持しませんでしたが、この答えが不適切であるもう1つの理由は、生のOpenGLではなくOpenGLベースのエンジンを使用しているためです。
w4etwetewtwet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.