私はあなたがすでに回答を受け入れていることを認識していますが、これ以上のコメントが必要です。ごめんなさい。申し訳ありませんが、私は私が重要だと考えていることに答えています。
3Dエンジンをゼロから作成する代わりに、私は既存のものと同じようにエミュレートすることにしました。World of Warcraft's。
しかし、私は実際の3Dとレンダリングエンジンではなくインターフェイスであるため、このプロジェクトでは[lua]を使用するとは思っていませんでした。
これら2つのスニペットから、あなたはゲームエンジンをエミュレートしようとしていないと伝えます。 3Dレンダリングバックエンド。これは同じことではなく、レンダリングバックエンド部分は完全なゲームエンジンに比べて非常に小さい部分です。
これ、ところで、あなたの質問のいずれかを答えることができますが:of Warcraftの
世界は両方を使用しているように見えます!実際には、通常DirectXを使用しますが、コマンドラインから "-opengl"スイッチを使用してOpenGLを使用することができます。
うまくいって、両方を実装しました。その作業の量は無視できないものですが、私の経験上、レンダリングバックエンドは、総コードの10%以下です。だから、複数のものを実装することはそれほど激しいことではありません。
さらに、今日のゲームエンジンのプログラミング部分は、最大のチャンクではありません。ほとんどのゲームプログラミングが含まれています。たとえば、ほとんどのルアスクリプトは物事の側面で考慮されています)。
OSXサポートはOpenGLを意味しました。彼らはそれをしました。彼らは古いハードウェアもサポートしたいと思っていたので、DX8レベルのハードウェアをサポートしています。それはすでに3つのバックエンドです。私は彼らが実際に何人を実装しているかに関与しているわけではありませんが、それはどの顧客ベースに到達したかったのでしょうか。
ゲームエンジンの複数のバックエンドは、すべてのグラフィックスカード/ OS /プラットフォームに拡張する必要があります。 リアル複数のバックエンドをサポートしていないゲームエンジン(最初のパーティのタイトルでも、デバッグ目的で代替バックエンドをサポートする傾向があります)を見たことがありません。
ok、それは長い序文でした。今、私の主な質問は次のとおりです。DirectX、OpenGL、sdlなどのラッパーライブラリを使用する必要がありますか?
これは、あなたがそれから抜け出したいものに強く依存しています。私はあなたのオプションリストは非常に完了していないことを追加される場合があります:
- DirectX9の
- DirectX10の
- DirectX11
- のOpenGL < 3.1(非推奨APIが削除される前に)
- のOpenGL> = 3.1
- OpenGL ES 1.1(あなたがの場合はが必要です。それは
- のOpenGL ES 2.0
うんは、これらのAPIは、あなたが処理したいどれかを決定する必要があることを十分に異なっている)は、プログラマブルではありません。
3Dレンダリングの非常に基本的なことを学びたい場合は、それらのいずれかが機能します。 OpenGL < 3.1は、最終的に他のもの(例えば、マトリックス操作、this plugを参照)のユーザコードで発生しなければならない多くのものを隠す傾向があります。
DX SDKには、基本コンセプトを理解するのに役立つ多くのサンプルが付属していますが、起動時に必ずしも必要ではない場合にDXの最新の機能を使用する傾向があります(たとえば、ジオメトリシェーダを使用してスプライトをレンダリングする)。 ..)
一方、ほとんどのGLチュートリアルでは、現代のハードウェア上で本質的に機能しない機能を使用する傾向があります(例:glBegin/glEnd、選択/ピッキング、削除されたもののリストを参照)。 GL 3.1またはthis other plug)、多くのことに対して間違った概念を植え付けてしまう傾向があります。
現実世界で最も使用されているものは何ですか?
ゲームの場合、DirectX9は今日のPCの世界で標準です。遠くまで
しかし、私はDirectX11がより多くのマルチスレッドの作業を可能にするため、より多くの市場シェアを獲得することを期待しています。残念ながらDX9よりもはるかに複雑です。
誰もOpenGLを使用していません(秘密スイッチについてはほとんど知りません)。
Macのオーナーに質問してください。
これは実際にはハードウェアベンダーがOpenGLドライバでエネルギーを費やすと思うのですか(私はあなたのコメントを一般化しています、ごめんなさい)?それの現実世界の使用法があります。しかし、あまりゲームではありません。そして、AppleはOpenGLをもっとiPhoneとの関連性を高めるようにしています(実際OpenGL ESもそうです)。
それは通常、プログラマは通常、「ラッパー」を、独自の3Dエンジンを作成してください行って何かした場合、
これは通常、エンジン設計の完全な一部です。 APIを同じレベルで抽象化しているわけではないことに気付いています。通常、「そこのすべての鐘と笛でこれを描画します」。その描画に適用するレンダリングアルゴリズムは、バックエンド固有の傾向があります。
しかし、これは非常にゲームエンジンに依存します。あなたがもっと理解したければ、UE3を見ることができます。ちょうどreleased free (beer) for non-commercial useがあります(まだ見ていないので、バックエンドを公開したかどうかわかりませんが、一見価値があります)。 ゲームエンジンは3Dを意味するのではなく、look at thisです。
"なぜ彼らはそれをやったのですか?" Mac OSXはDirectXをサポートしていないため、 –
SDLは単にプラットフォームの抽象化レイヤーにすぎず、OpenGLもDirectXも代用しません。 SDLが使用されている場合、両方のクロスプラットフォームライブラリが使用されているため、OpenGLでより一般的に使用されます。また、SDLはウィジェットツールキットを提供していないので、それが要件であれば(フルスクリーン3Dゲームであまり一般的ではない)、Qtのようなものがクロスプラットフォームアプリケーションのためのより良い選択かもしれません。 – codelogic
@gf:良い点。 MacでOpenGLを動作させるために問題が発生して以来、彼らがLinuxをネイティブにサポートしていない理由を私は今や疑問に思います。ああ、私は決して見つけられないだろう。 –