みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

基礎からC・C++を学習し、DirectXへの道

私はゲームにおけるプログラミングを理解したく、C・C++を勉強したいと思っています。

しかしC言語についてはまったく知識がありません。過去にBASICで音楽をつくったりEXCELでVBAをいじった程度のド素人です。

いちおうゲームに関する技術は一通り理解しています。CGソフトでのモデリング、マッピング、アニメーションもできます。
専門用語になりますが、いちばんできるようになりたいのは「シェーダの作成」です。レンダリング部分を自在にいじれるようになりたいのです。

このような状況で、C・C++を学習するにはどうしたらよいでしょうか?私は普段は会社勤めですのでできれば都内で学習できる学校に通いたいと思っています。

ゲーム全般の学習ができなくても、C・C++がある程度理解できるようになれば、あとはDirectXやOpenGL、Cgfxなどの専門書で理解できるのでしょうか?

Cの基礎からの学習方法だけのアドバイスでもかまいません。よろしくお願いします。

投稿日時 - 2005-10-29 03:04:15

QNo.1742786

すぐに回答ほしいです

質問者が選んだベストアンサー

・シェーダプログラミングと「C/C++によるプログラミング」は全くの別系統



・シェーダプログラミングと「C/C++によるアプリケーションプログラミング」は全くの別系統

と書くべきところでした。

CgやGLSLの言語としての構造はC言語をベースにしているので、C言語の基礎の学習は(CgやGLSLを使用するのであれば)シェーダプログラミングの学習の基本にも通じるものがあります。(もっと大まかに言えば、BASICやVBAによるプログラムにも通じるものがあります。)

しかし、C言語を使用して「アプリケーション」プログラムを作成するための知識はシェーダプログラミングには一切不要ですので、学ぶとすればC言語の「基礎だけ」「スタイルだけ」を学習しましょう。それ以上はシェーダプログラミングの学習には無駄です。

この用途には、一般のC言語の入門書のうちごく基礎で、なおかつ「実際的でないもの」(通常は「実用的でない」と判断される部類のもの)が、この用途には適しています。また、C++言語の入門書は不適です。

どれが「実際的でない」「実用的でない」かを判断するのはちょっと難しいですが、ざっと目次に目をとおして、特に目次の最後のほうで何かまとまったプログラム(たとえばゲーム、住所録、ワープロ等)を作成する章や例題が出ているようなら、その本は比較的「実際的」「実用的」と考えてよいでしょう。そういう本は避けたほうが無難です。

それから、CgやCLSLの専門書がもしあるのであれば、そちらは必携です。

DirectXの本は、内容に十分注意してください。「DirectXを使ったアプリケーションプログラム(たいていはゲーム)を作成する」というテーマの本の場合、おそらくほとんどは不適です。まだほとんどないかと思いますが、もし「DirectXを使ったアプリケーションプログラムで、シェーダプログラムを使用する」というテーマを持った本であれば、それは適しています。

投稿日時 - 2005-10-29 15:24:44

お礼

具体的なご説明に感謝します。

たしかにアプリケーションプログラミングはしないので、VC++のようなソフトは不要なのかもしれませんね。

GLSLやHLSL、Cg言語を記述するとキューブやスフィアなどの単純なジオメトリにシェーディングが確認できればよいのでは・・・と思っております。
NvidiaのfxComposerなどがそういう目的のソフトかと思っていますが、そうなのでしょうか?
つまり、VC++はC言語でアプリケーションを作成するソフトという構図に対して、fxComposerはCg言語でシェーダを作成するソフトという認識であっているでしょうか?

シェーダに関して海外のWebサイトなどが実際にソースを公開しているところも多いので参考にしてみたいと思います。

VC++の学習は不要ということでちょっと意外でしたが納得しました。

投稿日時 - 2005-10-29 18:33:19

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

その認識で合っています。

「グラフィックソフトウェアで使用する、(例えば)Cgで作成したシェーダプログラム」は、例えていえば「Excelで使用する、VBAで作成したマクロ」のようなものです。シェーダプログラムもVBAマクロも、それ単独で動作させることはできず、ホストとなるアプリケーションが別に必要になります。

そしてそのホストアプリケーションが、シェーダプログラム(やVBAマクロ)に必要な情報を与え、処理結果を表示する仲立ちをするわけです。(この辺が、「アプリケーションプログラムの作成」と考え方の異なる部分です。)

C言語でもそういったマクロ的なアプリケーションを書く場合がありますが、「マクロとしてC言語を使ってみましょう」という入門書はちょっと見たことがないですね。

投稿日時 - 2005-10-29 20:59:13

お礼

再びありがとうございます。
これで学習の方向性がわかったので明日書店にいって該当する書籍を探してみたいと思います。
#1、#2の方もあわせて詳しいご説明に感謝します。

投稿日時 - 2005-10-29 22:28:22

ANo.3

シェーダプログラミングと「C/C++によるプログラミング」は全くの別系統に属するものなので、どちらかを先に行わないと困るようなことはありません。

もしシェーダプログラミングの習得が優先目標であれば、C/C++を学習してもあまり役に立ちませんので、シェーダプログラミングだけに着手されることをお勧めします。

投稿日時 - 2005-10-29 13:20:48

お礼

お返事ありがとうございます。
>シェーダプログラミングと「C/C++によるプログラミング」は全くの別系統に属するものなので、どちらかを先に行わないと困るようなことはありません。

そうなのですか・・・!C言語と似ている別の言語という認識だったのですがまったく違うのでしょうか?
しかし一からシェーダ言語を解説している書籍とかは見当たらなかったので学習方法が難しいですね・・・。
何かよい方法があれば詳しくお伺いしたいです。

あと、VisualStudio2003 Professionalを購入しようと思っておりますが、もしかして必要ないのでしょうか?

投稿日時 - 2005-10-29 13:32:55

ANo.2

>ゲームに関する技術は一通り理解しています。CGソフトでのモデリング、マッピング、アニメーションもできます。
これは3Dモデリングソフトを使用した、リソース製作の扱いは出来ると言う事でしょうか?
これだけ見ると、扱える分野がグラフィッカの担当部分に見えるのですが。
もちろん、グラフィックの分野も知っていた方が、プログラマとしては得なのですが。

DirectXAPIとC・C++でゲームの製作を行いたいのであれば、CとC++で、初級者用の参考書に載っている様なレベルの機能群は、頭に入れておく。
または、すぐに調べて理解出来る状態にしておく事が重要です。

目安として、林晴比古氏の新C言語・C++入門のビギナー編(著書の好き嫌いは別として)にて扱っている程度の内容が把握出来ていれば、特別問題は無いと思います。

BasicやVBAを触った事があるのでしたら、基本の理解は著書やネットだけでもスムーズにいくのでは無いでしょうか?
少なくとも、言語の機能や構文の扱い程度、学校に行ってまで学ぶような物では無いと思います。

DirectXの著書等は、C/C++の基本が理解出来ている事を前提に書かれている物が多いので、これらを理解していないと、読んでも理解には繋がり難いです。

アーキテクチャを理解するだけなら、文章だけでも何とかなりますが・・・後は、数学の知識があると便利です。(高校レベル必須・大学レベル推奨と言った所でしょうか?)

DirectXまでの大きな流れは、sha-girl様の言うとおりですね。

・C/C++
・WindowsCプログラミング(WinMainやメッセージループ等)
・DirectX

となります。
Windowsプログラムの過程で、MFCを理解する必要はありません。私は経験上、ゲーム製作でMFCを使用した事はありません。
パッドの設定ツールなど、イベントドリブン方式のGUIを作るなら、MFCが使えると多少便利ですが。

また、DirectXも、学校で学んでもあまり意味を成さないと思います。

私は某専門学校のゲーム製作系学科の出身で、DirectXも科目にありましたが、とても学んだと言えるレベルではありませんでした。
扱えるようになったのは卒業後に独学で習得したためです。
もちろん、シェーダについて授業で扱う事はありませんでした。
シェーダや3Dの勉強は、sha-girl様同様、http://www.t-pot.com/
で行っています。

シェーダを扱うなら、HLSL も、1つ勉強する上でのキーワードになると思います。

投稿日時 - 2005-10-29 12:50:06

お礼

詳しいご説明ありがとうございます。
おっしゃるとおり私はグラフィック担当です。CGソフトのGUIでシェーダを作るのは簡単ですが、HLSLやCg言語でシェーダを作る、というのはまったく理解できていない状態です。

学校をいろいろ探しましたが、おそらくゲーム分野やCG分野で勤め人に教えているスクールのようなところはないだろうと思い、C/C++の基礎的な部分をスクールで学び、DirectXやOpenGLなどのグラフィック部分は独学で勉強しようと思っておりました。

学習の仕方の指針をいただいて感謝しております。お二方のアドバイスを元に学習計画を立ててすぐに実行したいと思います。

投稿日時 - 2005-10-29 13:19:36

ANo.1

シェーダープログラミングはゲーム業界の中でも本当に扱える人は少ないですね。
学校でシェーダープログラミングまで教えてくれるところはほとんど無いのでは。
基本的に独学でしょう。
シェーダーで有名なのはこのページです。
http://www.t-pot.com/
本もだしています。
ただ今の段階でこのページをみても難しいでしょう。
まず基本はCから初めて
C→C++→WindowsSDK→MFC(これは無くても良い)→DirectX
といった流れで学習していきます。

>C・C++がある程度理解できるようになれば、あとはDirectXやOpenGL、Cgfxなどの専門書で理解できるのでしょうか?
DirectXSDKにはサンプルがついています。C/C++が読めれば、その中で何をやっているのかが
わかるようになりますが、
そこまでになるには、それなりに大変です。
とりあえず最初のステップとして、C言語の入門書を買ってください。
あと下記サイトも参考になります。
http://www.kumei.ne.jp/c_lang/

投稿日時 - 2005-10-29 11:06:34

お礼

お返事ありがとうございます。
そうなのです・・・来年以降業界に必要なシェーダープログラマがまったくいなくて困った状況です。
やはり地道にCを勉強していってその流れでDirectXなどにいけばよいのですね。
URLのほうも参考にさせていただきます。

投稿日時 - 2005-10-29 12:44:21

あなたにオススメの質問