質問: ### 実用的なDesktopアプリケーションが作ってみたいです C/C++の基礎の本を一通り覚えDesktopアプリケーションを作ってみたいと思いました。 ネイティブなものが作りたかったのでWinAPIに手を出したのですがビジュアル的なものを扱うためにOpenGLを学習しようと思いました。勝手なイメージでDirectXよりOpenGLのほうが速いと思いOpenGLをまず勉強したいと思ったのですが(1)DirectXも勉強するべきでしょうか。 そして(2)OpenGLには様々なライブラリがありますがどれを使えばいいのでしょうか。VisualStudioでGL.hやGLU.hが入ってましたがfreeglutをよく見ます。補助ライブラリということですがネイティブな開発をするうえで純正以外のライブラリを利用するには抵抗があります。ある程度一般的なコードでかけるんでしょうか。 (3)クラシックなDesktopアプリケーションで最近廃れてきてもいますしOpenGLも含んだWinAPIを学習するための情報がMSDNだけでは十分ではありません。どこでそのような学習ができるでしょうか。リンクや書籍等教えていただきたいです。 (4)OpenGLより最近のVulkanに移行してしまったほうがVisual的な管理も並列計算的な管理も楽でしょうか。 以上(1)~(4)の質問です。初めての投稿により何か至らない点があるかもしれませんがよろしくお願いします。 ### 補足情報(FW/ツールのバージョンなど) 開発環境 Windows10 Pro VisualStudio2017 Community グラフィックボード GTX1050
回答: > > 勝手なイメージでDirectXよりOpenGLのほうが速いと思い > > > それは間違いです。DirectXは元々ゲーム開発も想定して作られているので、GPUの性能を最大限生かせるようなパフォーマンス重視の設計になっています。一方、OpenGLは元々クライアントサーバーシステムとして設計されており、3D描画をネットワーク通信でサーバーに処理させる、ということを想定としているので、GPUの制御方法との違いが大きく、その性能を生かし切れません。 そういう設計思想の違いから、速さを比較するならDirectX(3D)の方が「遥かに上」です。 また、表現力に関しても、DirectX(3D)は積極的に最新技術を取り入れているのに対して、OpenGLはそれを後追いする形となっているのが実情です。 > > OpenGLをまず勉強したいと思ったのですが(1)DirectXも勉強するべきでしょうか。 > > > パフォーマンスの点を除外したとしても、プラットフォーム縛りのないOpenGLを学ぶことは、一般的な3D描画処理を学ぶ上で価値があると思います。また、世の中パフォーマンスよりも正確さ(精密さ)が要求される分野もあるので、そこではOpenGLの地位は当分揺るがないでしょう。 もし、Windows向けのゲームを作りたいのならDirectXを学んだ方が良いかもしれませんが、OpenGLが使えるようになれば、Direct3Dの理解もさほど難しくはないと思います。 > > (2)OpenGLには様々なライブラリがありますがどれを使えばいいのでしょうか。VisualStudioでGL.hやGLU.hが入ってましたがfreeglutをよく見ます。 > > > Windows SDKには標準でOpenGLライブラリーが含まれています。それを使うためのヘッダーがやです。 OpenGLはマルチプラットフォームなAPIと謳われてはいますが、実際には、それを利用するための準備処理や画面への表示(ウィンドウ制御)など、プラットフォーム依存の部分もあります。そのため、その違いを吸収して本当の意味でのマルチプラットフォームにするためのライブラリーを利用するというのは、良い選択です。FreeGLUTをよく見るのは利用者が多いということであり、利用者が多いということは情報量も多いということなので、これから始めるに当たっては取っつきやすいのではないかと思います。 また、開発ツールに標準で付属していない外部ライブラリーを利用して開発することは「極めて一般的」であり、生産性を高めるために多くの開発者が積極的にやっています。 > > (3)クラシックなDesktopアプリケーションで最近廃れてきてもいますしOpenGLも含んだWinAPIを学習するための情報がMSDNだけでは十分ではありません。どこでそのような学習ができるでしょうか。リンクや書籍等教えていただきたいです。 > > > OpenGLとWindows APIは分けて考えた方が良いです。ちゃんと学ぶには、やはり市販の入門書で体系的に勉強するのが一番でしょう。具体的な書籍名はすぐには答えられませんが、私はこの手の質問では、書店で流し読みしてみて理解できそうな本を買いましょう、と答えることにしています。私ならそうするからです。 ある程度知識を身につければ、後はネットで検索など自力できるようになります。 > > (4)OpenGLより最近のVulkanに移行してしまったほうがVisual的な管理も並列計算的な管理も楽でしょうか。 > > > Vulkanは使ったことがないため正確なことは判りませんが、設計思想はDirect3Dと同じくGPUの性能を引き出すことが目的のようです。管理というのが具体的に何を指しているのか判りませんが、パフォーマンス重視ということは、おそらくOpenGLに比べると3D処理の抽象度が下がったということなので、むしろ複雑に(面倒に)なる可能性が考えられます。 業務での必要性があるのならともかく、Vulkanはまだ出たばかりで情報量も少ないでしょうから、これから3D処理を学ぼうとするにはハードルが高いように思います。