asaのブログ

プログラミングの勉強まとめ

OpenGL ウィンドウ表示までのテンプレ

 毎回同じコードを書くのが億劫なので、一部をテンプレ化しました。ここは実際描画にはあまり関係ないのでさらっと流してしまっていい気がします。

 ちなみにglmは計算用のライブラリです。必要に応じてインクルードします。 

gist69c5f12f4e840125832752093c795849

 

OpenGL 初めてのGLFW&GLEW

 これまでGLUTを使っていましたが、新しいバージョンに対応したOpenGLを使いたかったのでGLFWとGLEWを使って見ました。

 

 こちらのテキストを参考にさせていただきました。ただ四角形を表示させるだけなんですがかなり骨が折れます。

 http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFW.pdf

 

  挙動はこんな感じです。

 

f:id:asa_r:20170829184312g:plain

 

 コードは下の通りとなりますが、これで何かしたかというとそうでもありません。いつも使うようなテンプレができたくらいです。

 

giste30ed3c7ea6dbed37e1e3680f39d77fc

  

OpenGL Bezier曲線

 ベジエ曲線の自分のチートペーパーを作成しました。ついでにOpenGLでそれを実装してみました。

 

 まずチートペーパーから

f:id:asa_r:20170827105639j:plain

 

 ベジエ曲線は所与の線を t : ( 1 - t ) に内分し、それをさらに内分して内分して…を繰り返して最終的な点を求めていきます。結果としてtに依存するn次曲線が得られます。各点に与えられる重みを一般化するとBernstein基底関数を得ます。これを元にベジエ曲線は最終的に最後の行の式にまとめられます。ええ、簡潔でいい式です。

 

 一度感覚を掴むと簡単に理解できますが、いまいちピンと来ない時は下のリンクが役に立ちます。曲線が描かれる様子をアニメーションで見ることができるので直感的に理解できます。

blog.sigbus.info

 

 で式が理解できても実装できないとなんの意味もないので少し描いてみました。素直にそのまま書いてみたので、ベジエ曲線ってどんなものだっけと忘れた時に役にたつかもです。

 

 コード

gistf67c50c45b3d50609fd1ac296cae6b17

 

 ベジエ曲線は次のようになります。

f:id:asa_r:20170827111933p:plain

 

 実際の描画点の計算は次のようになっています。t、x、yの順番に出力されています。

 

f:id:asa_r:20170827112108p:plain

 

MacでOpenGL環境の導入 with Xcode

 更新が途切れ途切れになっていましたが、引っ越し後のバタバタも去り大体のイベントを消化し、後のことも大体の目処がついたのでようやく落ち着いてコードが打てるようになりました。

 

 というわけで今回はずっとやりたかったGLSLに取り組むためOpenGL環境を整えたいと思います。具体的にはGLFWとGLEWを導入します。実際に実装するのはQtでも構いません。Qtをしばらく勉強しましたが、クロスプラットフォームGUIを構築できるQtはかなり便利です。さらにQtではOpenGLのサポートが厚いです。ただ、例えば単体で少し何かを動かしてみたいと思った時には床井先生もおしゃっていますがQtは少しカロリー高めです。

 

 環境構築にかかる時間は正味で少し調べたりすると大体30分程度かかりますが、手順通りやると10分程度で終わります(Xcodeが導入済みとして)。GLFWとGLEWを導入すると今後あげるリンクにあるチュートリアルを実行することができます。またリファレンスを辿ればそのほかの機能を十分に使うことができそうです。

 

 手順

    1. Homebrewのインストール

    2. GLFWのインストール

    3. GLEWのインストール

 4. Xcodeの設定

 

 1.Homebrewの導入

 パッケージ管理ツールのHomebrewを導入します。XcodeでもAppleが対応しているパッケージを導入することができますが、残念ながらGLFWとGLEWは対応していません。GLUTは最新のモダンなOpenGLには対応していないのでシェーダリングランゲージを使おうと思ったら上の二つを導入する必要があります。

 

 Homebrewのインストールは極めて簡単でターミナルを立ち上げて公式サイトにあるコマンドをコピー&ペーストで終わりです。ここまで大体2、3分です。

brew.sh

 

 2. GLFWの導入

 こちらも一瞬で終わります。ターミナルを立ち上げたまま、再び公式サイトのコマンドをコピー&ペーストで終了です。ここまで4分。

brewformulas.org

 

 3. GLEWの導入

 基本操作はGLFWと一緒です。ターミナルを立ち上げたまま公式サイトのコマンドをコピー&ペースト。ここまで5分

brewformulas.org

 

 4.Xcodeの設定

 Xcode側に先ほど導入したパッケージの場所を教えてやります。具体的にはライブラリとヘッダファイルを設定するだけです。

 

 ライブラリ等の場所は通常だと開けない場所にあります。先にフォルダを開けるようにFinderで少し手を加えておきます。下の記事通りにやればOKです。

d.hatena.ne.jp

 

 後はこちらの記事の”Xcodeの設定”を参考にすれば設定完了です。

qiita.com

 

 で大体10分くらいで終わります。

 

 動作確認

 一応動作を確認しておきます。ウィンドウが表示されれば成功です。ちなみにGLFWにはシングルバッファモードがありません。バッファのスワップを忘れないようにしてください(自分はこれを忘れやすいです)。

gist1a7fbbc24eddac57a427cfb0eb61ee22

入門Qt4プログラミングを読む1

 『入門Qt4プログラミング』を終わらせて次の本なり文献なりに移りたいと思います。かといって流し読みしただけでは大事な点を取りこぼしてしまうこともあるのでざっくり役に立つようにまとめていこう思います。

 

 序文ではQtがどのようなライブラリかを解説しています。ここで気に留めておきたいのはQtのコミュニティが紹介されている点です。

 まずQtの公式サイトのトップページはこちらです。

www.qt.io

 こちらをざっと見ていきましょう。Qtの使用例が最初に紹介されています。

www.qt.io

 全て紹介できませんが、グラフィック周りについては少し調べて見ました。

 

1. Randeon Software Crimson Edtion

  これが一体なんなのかさっぱりわかりませんでした。調べたところAMDが自社のチップセット用に開発したドライバやAPIの総称を言うようです。これまで.NETで開発されていた同製品をQtに変更。起動時間を大幅に縮小することができたということです。

 グラフィックスドライバについてはこちらの記事は参考になりました。AMDのエンジニアとの対談記事です。

4Gamer.net ― 一問一答「ATI Catalyst」。AMDのドライバ担当者にいろいろ聞いてみた

 ちなみにこちらのATI CatalystはRandeon Softwareの前身に当たるソフトです。グラフィック大手のAMDはゲーム市場に力を入れているようです。また、OpenCLなどのGPGPU技術をが盛んな印象もあります。

 他の記事については下を参考にしてください。

Radeon Software[HARDWARE] - 4Gamer.net

Devgurus | Community

 

 2. Formlabs

 3Dプリンタの製造メーカーです。同社ではマルチプラットフォームOpenGLC++が使えるという理由からQtを採用しています。

 Form 2 | Formlabs

 

 3. EyeTech

 視線をトラッキングするシステムを作っている会社です。ここではマルチプラットフォームに対応しているという点からQtを採用しました。

 Qt - Case EyeTech Digital Systems

 

 4. eyeMaps

 カメラに映った山などを3Dモデル化。山の情報などを表示することができるかなり革新的なソフトです。こちらもQtで作成されています。

 Built with Qt | eyeMaps | 3D augmented reality app

 

 あとはQtの開発者フォーラムも見ておきたいです。特に質問がなくても自分が知らなかったことを話しているとなんだろうと考えるきっかけになります

 Home | Qt Forum

 最後に見て欲しいのはQtのドキュメントです。QtCreaterを使うとf1でドキュメントをかなり読むことができますが、時間があるときに網羅的に読むならこちらが良いです。

 Qt Documentation

 

 序文の中身で大事なのは上の通りです。次回は目次から本の内容を俯瞰してコード例を打ち込みながら本を完了させていきたいと思います。

 

C++ 多重継承〜仮想関数〜入出力

 ようやく環境が整ったので随時やっていきます。とりあえずいつものように基礎練です。

gist2f38154bf249b478740a5710d6cc357d

gistb541793e494c83e504fe3a9767ab853a

gist838eff0d88a9ed95abb5ee4bb0769035

gist6a4f3701a167734aa16888efabf69a17

Macでの開発環境の構築(C++、Java)

 パソコンをWindowsからMacへと切り替えました。周りにユーザーが多かったので買い替えました。愛用のLet's Noteはクリーンインストールして後輩にあげることにしました。ありがとうLet's Note !

 

 そういうわけで今回Macで開発環境をいくつか整えてみましたので、参考までにメモっておきます。

 

 開発環境

 差し当たり必要な環境は下の通りでした。

 1. C++

 2. Java

 3. Qt

 4. R

あと学習がこれ1台で済むようにしたかったので

 5. ネット環境の整備

 6. Kindle

これまで10年以上前のパソコンを使用していたので出来ませんでしたが、叔父が3Dプリンタを買う(!)ということで、勉強用に3Dソフトを入れることにしました。

 7. Blender

 

 構築

 C++JavaにもいくつかのIDEの候補があります。今回はC++をXcoder、JavaNetbeansで構築することにしました。NetbeansJDKのインストールを要求されるので、先に最新のJDKをインストールしておくと良いです。

 Qtはオンラインインストラーを使用するとエラーが発生したのでオフラインインストラーをダウンロードしました(Qt - Download Open Source Step 3)。ちなみにQtのインストールにはXcoderがインストールされている必要があります。先にインストールしておきましょう。

 本や論文を読んでいてこの計算どうするんだろうって時に役に立つのがRです。統計用の言語でがっつりオブジェクト指向なのでJavaC++ユーザーには親しみやすい気がします。こちらから(R for Mac OS X)。

 今まで携帯のデザリングで凌いで来ましたがもはや限界と思いWiMaxを導入しました。あっちの本を持って来て、こっちの本を持って来てといったのが煩わしいのでこまめに必要になる本についてはKindleで揃えることにしました。

 せっかくOpenGLとかを勉強していることもあって3Dを初めて見ることにしました。Shaderにするか考えましたが、勉強用に無料のBlenderを導入しました。

 

 

 以上MacC++Java、etc...の環境構築でした!