私はしばらくの間OpenGLライブラリを自分で教えてきましたが、ゲームを作り始めたいです。ただし、簡単に紹介するために、トップダウンポケモンスタイルのゲームなど、2Dのものから始めたいと思います。
これは良い計画ですか、それともOpenGLは3D専用に作られていますか?
私はしばらくの間OpenGLライブラリを自分で教えてきましたが、ゲームを作り始めたいです。ただし、簡単に紹介するために、トップダウンポケモンスタイルのゲームなど、2Dのものから始めたいと思います。
これは良い計画ですか、それともOpenGLは3D専用に作られていますか?
回答:
OpenGLは2Dゲームに非常に適しています。通常は3Dで使用されますが、2Dゲームでも同じ機能を使用できます。つまり、3D OpenGLでできることはすべて、「2D」OpenGLでも適用できます。
2D OpenGLは、3D OpenGLと同じ方法で実現されます。2D OpenGLはテクニックのアプリケーションです。つまり、シーンを平らな平面にレンダリングし、設定に応じてシーンを歪める透視投影ではなく正投影を使用します。
例:
(a)は正射投影のシーンです。(b)は、透視投影を使用した同じシーンです。2Dゲームでは、深度が変更されると、スプライトの位置がずれることがあります(開発の進め方にもよりますが)。透視投影を使用すると、画面座標での位置合わせがより難しくなります。
さらに、OpenGLには多くの利点があります。主に、ハードウェアアクセラレーションは大きなプラスです。また、グラフィックカードの機能とその処理方法をより細かく制御できるため、ケース固有の最適化が可能です。
名前が示すOpenGLはグラフィックライブラリです。3Dを念頭に置いて開発されていますが、ライブラリには3Dを使用するというハードコーディングされた仮定はありません。さらに、3Dの機能のおかげで、厳密に2Dのアプローチでは困難ないくつかのことが簡単になります。例:
これは私の頭の上からもたらされるいくつかの利点に過ぎません、他にもいくつかあると思います。
OpenGLは3D APIですが、それでも2Dゲームを作成するために使用できます。データを飛行機に拘束するなど、さまざまな手法を使用して、2D環境を3Dで偽造できます。
ただし、これを明白な方法で実行するための実際のAPIのサポートは限られています(たとえば、「2Dモードをオンにする」機能はありません)。それをシミュレートする方法(オンラインの多くのチュートリアルで見つけることができます)は、実際に内部で使用されている3Dパイプラインをある程度理解しないと、完全に理解するのが難しい場合があります。
OpenGLをしばらく見てきたようで、おそらくそれらの基礎を十分に把握しているようです。ただし、それらに不安がある場合は、cocos2dなど、OpenGLの上に構築された2Dライブラリを使用してゲームを開始することをお勧めします。2D APIが一般的にどのように見えるかについての経験を提供し、ハードウェアアクセラレートされた3Dバックエンドの利点を享受できます。
私は現在、OpenGlプログラミングで多くの経験を積んでおり、それが苦痛であると言えます。プログラミングを始めたとき、私はBlitzBasicのような単純な環境で非常に生産的でした。その後、C ++とOpenGlを学ぶことで次のステップに進みました。そして、あなたに良い先生や頼む人がいないとき、あなたは永久に黒い画面にぶつかるでしょう。最大の問題は、OpenGlの地獄です。openglの状態を変更するために交換できる多数のスイッチがあります。また、一部のスイッチは他のスイッチに依存しています。たとえば、glGet(GL_TEXTURE_BINDING_2D)はglGet(GL_ACTIVE_TEXTURE)に依存しています。また、状態を示すドキュメントは、他のどの状態が最適でないかによって異なります。テクスチャの読み込みなどの多くの操作では、この状態を変更する必要があり、古い状態を必要とする他のコードが破損することが非常に多くあります。そして、OpenGlが実装依存の動作としてこの問題があるため、プログラムはあなたのマシン上で実行されますが、他のマシン上ではすべてが表示されます。ここでできることは、10000行のコードのどこが悪いのかを推測することです。欲求不満が好きなら、OpenGlを2Dに使用してください。他のすべての人には、必要ない場合はやらないでください。OpenGlで生産性を高めることができますが、多くの時間と神経がかかります。おそらくあなたが使いたい以上のもの。OpenGlで生産性を高めることができますが、多くの時間と神経がかかります。おそらくあなたが使いたい以上のもの。OpenGlで生産性を高めることができますが、多くの時間と神経がかかります。おそらくあなたが使いたい以上のもの。
Unity3DはOpenGLを使用しており、2Dおよび2.5Dプラットフォーム向けに使用しています。Unity3Dは基本的に3Dゲームエンジンですが、2Dおよび2.5Dゲームにも使用されます。x、y、zプレーンを使用して、移動または回転をこれらのプレーンのうち2つに制限し、本質的に3Dワールドで2D雰囲気を作成できます。