OpenGL触ってみた

この記事は、KCS AdventCalendar2019 8日目の記事です。
こんちには、KCS命燃やす担当の8u+4です。この一年を振り返ってみると、自分でも意外なほどに命を燃やしていて驚いています。今回は、今年の4月から少しずつ勉強を進めているOpenGL関連について話そうと思います。
(よわよわなので間違たことを書くかもしれません。許してください)
(ていうか今回皆めっちゃ書いてない?やばない?)
(ところでこの子可愛くないですか?「私に天使が舞い降りた!」の白咲花ちゃんっていうんですけど)
OpenGLとは?
一言で言えば、OSに依存しないグラフィックス・インターフェイスです。
OpenGLはグラフィックスハードウェアを制御するための基本的な機能しか持っていません。そのため、何かを描画したいときにはCGの理論の知識も必要になります。同じようなモノとしてDirectXがあるのですが、こいつはWindowsでしか動かないため他のOSでは動かすことができません。
CGの理論を勉強するのには少々手間がかかるため、実際のアプリ・ゲーム開発ではUnityやDxLibのような、それらが既に実装されているミドルウェアが用いられます。
実際にOpenGLを扱うとしてもOS毎にお膳立てが必要なため、QtやGLUT、GLFWといったツールキットを扱う方が効率的です。
僕はCGの理論を学びたかったり、Blenderで作ったものを自分で作ったアプリで表示出来たら面白いなと思って、GLFWとC++を使いながら勉強を始めました。
参考になったサイト
- 描画の手順
このサイトがわかりやすく説明しているのでおすすめです。 - チュートリアル
このサイトやこのサイトのコードは比較的新しいので参考になりました。 - チュートリアル以降
ここからは英語のサイトの方がわかりやすいです。このサイトやリファレンスがおすすめです。 - 癒し
疲れた?なら休んでアニメでも見ようじゃないか。Dアニメストアとかで見れるのでぜひ見ましょう。 http://watatentv.com/
何が難しいの?
個人的に最初の内に苦しんだ点をいくつかあげます。
- 資料が少ない!
openGLはそもそも理論の勉強の手間等から手を出す人が少ないため資料がただでさえ少ないです。加えて、発展した内容になればなるほど資料は更に少なくなります。また、バージョンが上げることに仕様や機能が変わってきているので古い記事はあまり参考になりませんし、使用している言語・ツールキットによっても参考にならないことがあります。 - 環境構築きつい
まずそもそも環境構築がとてもきついです。僕の場合、Visual Studio特有の糞もあいまって更にきつかったです。また、こいつも資料が少なく、自分と同じ条件で環境構築している記事を探すのはかなりきついと思います…。 - 英語
資料が少ない時に最も頼れるのが公式のリファレンスです。しかし、リファレンスは英語で書かれているため読むのに時間がかかります。また、扱う内容が発展していくにつれ英語の記事しか参考にならなくなっていきます…。 - バグの原因がわからない!
openGLではGPU上でGLSLという言語を使って演算・描画します。こいつが曲者で、デバッグモードで実行していてもGPU上のエラーでは止まらないため、直接的なバグの原因を探るのが難しいです。幸い、どんなエラーがバグの原因かを探ることはできます(エラー検出用のプログラムを書く必要がある)が、そこからは自分で特定しなければいけません。 - 座標系
座標系自体は簡単ですがBlenderと座標系が異なるので、データを渡すときに少し手間取りました。
なんか暗い話ばかりしてきましたが、やりたいことができた時の達成感はとてもあります。コードの整理(自分ができてるとは言っていない)やバグ探し、英語のいい勉強になるので辛くはないです。
やってきたこと
自分のやってきたことです。一部画質悪かったり、なかったりしますが許してください。
4月 Hello World~座標変換
三角形の表示(openGLにおけるHello World)からVertex Shader・Fragment Shdaerの扱い、3D描画、簡単な座標変換の勉強をしていました。
5月 objデータの取り込み~ユーザー入力
Texture Mapping、Blenderで作成したお猿さんをobj形式で出力して表示をしていました。
6月 KCSちゃん描画!
先輩の作ったKCSちゃんをobj形式で出力して表示をしていました。かわいい
お猿さんと違ってパーツごとにobjやtextureが分かれていたので少し難しかったです。
7月 テスト勉強
はい
8月 ボーンの実装、スクショ機能実装
これはopenGLというよりCGの理論ですが、後にやろうとしていることのためにBoneの仕組みを実装してみました。
9-11月 矢上・三田祭
命を燃やせ!!!(openGL関係ないです)
12月 Transform FeedBack~
Transform FeedBackという、openGLの機能の一つである、GPUをGPGPUとして扱う機能を使えるようにしました。今は、Blenderからアニメーションを取り込む勉強をしています。
これから
色々ときつい部分の多いopenGLですけど、やってみると結構面白いです。まあ、他のやりたい人がいたらおすすめはしないです()。まだまだopenGLについて学びたいことは沢山ありますし、openCVとの連携とかもやってみたいなと思っています。がんばるぞい!
では~
Posted on: 2019年12月9日, by : 8u+4