2009-11-07 13 views
12

私は非常に広範なサーバープログラミング経験を持つC++プログラマーです。しかし、私は今はかなり退屈しており、新しい分野に取り組むことを決めました。学習目的のために3Dゲームプログラミングです。また、私はこの分野で働くことに決めたら、この学習プロジェクトが将来的に良い履歴書材料になるかもしれないと思います。実世界のゲームエンジンにはどんな3Dグラフィックスフレームワークを使用しますか?

3Dエンジンを最初から作成する代わりに、私は既存のものと同じようにエミュレートすることにしました.World of Warcraft's。あなたは(これをスキップして自由に感じる)理由として興味があれば:

  • これは、すべてのマップテクスチャ、モデルと何すでに私が学習に興味がないんだけど(行われていない現実の世界に成功したゲーム
  • です
  • ファイル形式は多かれ少なかれリバースエンジニアリングされています
  • 問題がある場合は、私が見ることができる同じオープンソースプロジェクト(wowmapview)が既にあります。

OK、それが今、私の主な質問は以下の通りです。..長い序文た:私はDirectXの、OpenGLのは、そのようなSDLなどのラッパー・ライブラリー、または何を使用する必要がありますか?

実世界で最も使用されているものは何ですか?

そして、何か私を困惑させる:World of Warcraftは、両方を使用しているようです!実際には、通常DirectXを使用しますが、コマンドラインから "-opengl"スイッチを使用してOpenGLを使用することができます。

これはゲームで一般的なものですか?なぜ彼らはそれをやったのですか?私はそれがたくさんの仕事だと思っています。私の理解から、とにかくOpenGLを使用する人はいません(非常に少数の人が秘密のスイッチについて全く知っていません)。

プログラマは通常SDLのような独自の3Dエンジン「ラッパー」を作成し、スイッチ/ #defines/whatnotに基づいて最終的に呼び出すAPI関数(DirectXまたはOpenGL)を決定します。 ?または、この機能は既にsdlに組み込まれていますか(DirectXとOpenGLを自由に切り替えることができます)?

最後に、お勧めの本がありますか?

ありがとうございます!

+5

"なぜ彼らはそれをやったのですか?" Mac OSXはDirectXをサポートしていないため、 –

+3

SDLは単にプラットフォームの抽象化レイヤーにすぎず、OpenGLもDirectXも代用しません。 SDLが使用されている場合、両方のクロスプラットフォームライブラリが使用されているため、OpenGLでより一般的に使用されます。また、SDLはウィジェットツールキットを提供していないので、それが要件であれば(フルスクリーン3Dゲームであまり一般的ではない)、Qtのようなものがクロスプラットフォームアプリケーションのためのより良い選択かもしれません。 – codelogic

+1

@gf:良い点。 MacでOpenGLを動作させるために問題が発生して以来、彼らがLinuxをネイティブにサポートしていない理由を私は今や疑問に思います。ああ、私は決して見つけられないだろう。 –

答えて

30

私はあなたがすでに回答を受け入れていることを認識していますが、これ以上のコメントが必要です。ごめんなさい。申し訳ありませんが、私は私が重要だと考えていることに答えています。

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です。

+3

+1は非常に徹底的で思慮深い答えです! –

+1

偉大な答えは、この1つを受け入れたとマークしました。ありがとう! –

+0

うわー、私はあなたが事実の後に受け入れられた答えを変えることができるのか知らなかった。 – Bahbar

3

DirectXでOpenGLを使用することの主な利点は移植性だと思います。 DirectXはWindows上でのみ動作します。しかし、これは問題ではないことがよくあります(多くのゲームはWindows上でのみ動作します)。

DirectXはサウンドや入力などのグラフィックスとは無関係のゲームに役立つ他のライブラリも提供しています。私はOpenGLでよく使われる同等のものがあると信じていますが、実際にはOpenGL自体の一部ではないと思います。

DirectXでウィンドウにロックし、C#とマネージコードの学習に興味がある人は、XNAが非常に簡単に学習できるプラットフォームであることがわかりました。 DirectX(またはOpenGL)の多くの本当に面倒な詳細を扱わずに、ほとんどのコンセプトを学ぶことができます。シェイダーコードを使用してDirectXの機能をフルに活用できますが、もっと親しみやすい環境です。それは私の推薦ですが、再びC#に切り替える必要があります(気をつけてください、あなたも再開してください)。

+0

DirectXはC#をサポートしなくなりました。http://social.msdn.microsoft.com/Forums/en-US/gametechnologiesdirectx101/thread/e9f458e0-65c6-4936-9af4-4276fc92f111私がサポートで使用した最後のバージョンは9.0c –

+2

でしたX800のための巨大な+1は、技術の質問者の背景と将来の適用性を与えました – gn22

+0

本当に、DirectXをC#で直接プログラミングすることはできません、XNAはDirectXを使用するC#ライブラリです。それはDirectXと同じではなく、今日非常に多く使用されています。バージョン3.0が最近出ました。 –

1

Ogre3Dのような、より高いレベルのインターフェイスで、低レベルの3d apiをカプセル化するいくつかのプロジェクトを参照することをお勧めします。あなたがこれを学ぶためにやっているように、自分自身で低レベルの詳細を実装するのが面白いかもしれないと思いますが、おそらくこのようなプロジェクトから多くのことを学ぶことができます。

+1

またはirrlicht、またはopenscenegraph –

+0

確かに、すべての良い。 – jcoder

-1

私は今、いくつかのOpenGLの仕事をしています(WindowsとMacの両方で)。

Unity3Dエンジンを使用した私の真夜中のゲームプログラミングと比較して、OpenGLを使用することは、材料を購入するのと比べて家を作るために自分の木を切り落とすことに少し似ています。

Unity3Dはすべて(Mac、PC、iPhone、Webプレーヤーなど)で動作し、ゲーム、ゲームを作るものに集中できます。それを上にするには、私が書くことができるものより速いです。あなたはC#で Java (編集:それをJavaScript)または Boo にコードします。

私はOpenGLで作られたものを望んでいるクライアントのデモを模擬するためにUnityを使用しました。実際の世界でも使用されています。

-Chris

PS:Unity Indieバージョンは最近無料になりました。

+1

ちょっとした訂正:あなたはJavaではなくJavascriptでプログラムできます! :-) –

+0

ありがとうThiago。私は7年後にそれを修正しました... –

0

あなたが本当にレンダリング部分に興味があるなら、私はogre3dを提案できます。それはクリーンで、C + +、テストされ、クロスプラットフォームです。私は2つのプロジェクトでそれを使用し、他の経験(例えばtorque3d)と比較して、私は良いサポート(チュートリアル/ wiki /フォーラム)とそれほど急な学習曲線が好きではなかった。私は誰かが、彼らがデザインで使ったソースコードと概念を見て、多くを学ぶことができると思います。少し古いですが、付属の書籍もありますが、それは始まりには良いです

この問題はこのエンジンの中で考えていて間もなくゲームプレイのようなものが必要になります(タイマー、イベント)要素をシミュレートしたり、テストしたりすることができます。あなたはogre3dsの欠点(ゲームエンジンではない)と別のミドルウェアを使用して自分自身で実装することになります。

もし本当に3Dレンダリングに触れたいのであれば、いくつかのコンピュータグラフィックスブック(gpu gems、shaderx)を撮り、Web上でいくつかのチュートリアルとデモを見て、自分の基本フレームワークを構築してください。これは経験のためであり、私はあなたがこのアプローチから最大限に学ぶと思います。少なくとも私はした...

関連する問題