質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.82%

WinAPI学習にあたって

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,354

Weapon

score 89

 実用的な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

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

勝手なイメージで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ライブラリーが含まれています。それを使うためのヘッダーが<gl.h>や<glu.h>です。
OpenGLはマルチプラットフォームなAPIと謳われてはいますが、実際には、それを利用するための準備処理や画面への表示(ウィンドウ制御)など、プラットフォーム依存の部分もあります。そのため、その違いを吸収して本当の意味でのマルチプラットフォームにするためのライブラリーを利用するというのは、良い選択です。FreeGLUTをよく見るのは利用者が多いということであり、利用者が多いということは情報量も多いということなので、これから始めるに当たっては取っつきやすいのではないかと思います。
また、開発ツールに標準で付属していない外部ライブラリーを利用して開発することは「極めて一般的」であり、生産性を高めるために多くの開発者が積極的にやっています。

(3)クラシックなDesktopアプリケーションで最近廃れてきてもいますしOpenGLも含んだWinAPIを学習するための情報がMSDNだけでは十分ではありません。どこでそのような学習ができるでしょうか。リンクや書籍等教えていただきたいです。

OpenGLとWindows APIは分けて考えた方が良いです。ちゃんと学ぶには、やはり市販の入門書で体系的に勉強するのが一番でしょう。具体的な書籍名はすぐには答えられませんが、私はこの手の質問では、書店で流し読みしてみて理解できそうな本を買いましょう、と答えることにしています。私ならそうするからです。
ある程度知識を身につければ、後はネットで検索など自力できるようになります。

(4)OpenGLより最近のVulkanに移行してしまったほうがVisual的な管理も並列計算的な管理も楽でしょうか。 

Vulkanは使ったことがないため正確なことは判りませんが、設計思想はDirect3Dと同じくGPUの性能を引き出すことが目的のようです。管理というのが具体的に何を指しているのか判りませんが、パフォーマンス重視ということは、おそらくOpenGLに比べると3D処理の抽象度が下がったということなので、むしろ複雑に(面倒に)なる可能性が考えられます。
業務での必要性があるのならともかく、Vulkanはまだ出たばかりで情報量も少ないでしょうから、これから3D処理を学ぼうとするにはハードルが高いように思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/21 16:16

    書籍は手に取ってみたいですがWinAPIなどの書籍はなかなか見つかりませんし見つけてもCreateWindow(Win32なのかな?)やLRESULT CALLBACKがLONGとなってたりします。最近の書籍などの入手はどうすればいいでしょうか。Win32のものでも対応できますか。

    キャンセル

  • 2018/02/21 17:04

    Windows APIはかつてWin32 APIと呼ばれていたもので、64bit版のWindowsが登場してからはWindows APIと呼ぶようになったというだけなので、両者は同じものを指していると考えても差し支えありません。32bit向けと64bit向けでAPI呼び出しの書き方が変わるということはありませんし、実際、全く同じコードを32bit向けと64bit向け両方にコンパイルできます(ただし、ポインタやハンドル等のサイズの違いには注意する必要はありますが)。基本的なAPIの使い方はWindows NT時代('90年代半ば頃)から変わってはいませんよ。

    ということで、「Win32」と書かれていたとしてもそのまま通用します。

    とは言っても、あまり古い本だとAPIよりもツール(Visual Studio)のバージョンが古すぎて今となっては通用しないということは考えられますので、できるだけ新しい本を選びましょう。

    キャンセル

+1

普段vulkanを使っている身から(3),(4)の質問に答えます。

(3)どこでそのような学習ができるでしょうか。リンクや書籍等教えていただきたいです。

自分の経験から参考書、参考サイトを上げさせてもらいます。

winAPIの参考書

猫でも分かるwindowsプログラム
APIで学ぶWindowsプログラミング 

openglの参考
youtube ゲーム道館
GLUTによる「手抜き」OpenGL入門

DirectX DirectX 11 3Dプログラミング

vulkan 
vulkanは、日本語のサイトは、現在まだ作られていません。が私が参考したサイトを挙げます。
Khronos ghroup youtube 
ほかにもyoutubeでVulkanと検索したら、tutolialの動画が出てきますよ。

おまけ 
CGに興味があるなら、GPUメーカのNvidiaが書いている 
GPUgemsシリーズ, game programing gemsシリーズがおすすめです。

(4)OpenGLより最近のVulkanに移行してしまったほうがVisual的な管理も並列計算的な管理も楽でしょうか

難易度的には、WinApi < OpenGL < DirecrX < Vulkan といった順に難しくなります。
簡単ということは、簡単なほど内部的に勝手にオブジェクトファイルが作られているというわけで、
処理スピードでは、Vulkan < DirectX < OpenGL < WinApiの順に時間がかかります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る