openFrameworksの構造
![]()
ファイルツリー構造:
pre release v0.05 x-code FAT 内のフォルダの構造(位置関係)を崩してはいけません。ビルド・コンパイルするときにフォルダの相対関係から、ライブラリやヘッダファイルを探して
pre release v0.05 x-code FAT
├─ apps
│ ├ addonsExamples (拡張サンプル、このフォルダの中にプロジェクトフォルダを作って、開発していく)
│ ├ blabexamples (このフォルダの中にプロジェクトフォルダを作って、開発していく
│ └ Examples (サンプル、このフォルダの中にプロジェクトフォルダを作って、開発していく
├─ blablib
├─ libs
└─ other
openFrameworksのコンパイルテスト:
pre release v0.05 x-code FAT
├─ apps
│ └ Examples
│ ├eventsExample→openFrameworks.xcodeprojビルド → すべてのターゲットをクリーニング
ビルドして実行
openFrameworks.app がプロジェクトフォルダ直下にできていること。これがビルドされた実行ファイルです。移動する場合はリソース(フォントや画像など)のフォルダ "data" も付帯すること。
どのソースを編集するか??
![]()
srcフォルダの中のソースのみ、あるいはsrcフォルダの中の自作のファイル(クラス記述) .cpp / .h のみを編集して開発を進めます。そのほかのソースは変更する必要はありませんし、変更すると不具合がでることもあります。
Xcodeでは左側のグループとファイルの中で参照できる src という グループを示します。pre release v0.05 x-code FAT
├─ apps
│ └ Examples
│ ├ fontsExample
│ ├ data
│ └ srcさらにいえば、main.cpp はウィンドウスタイル(フルスクリーン、オーバーラップウィンドウなど)を変更するときのみ、編集します。
blabExamples と examples でのソースの互換性
![]()
boost , boost/asio すべて、pythonScriptEngine (ScriptEngine.hxx) を使用しなければ、src フォルダのみを移動・コピーして、コンパイル・ビルドできます。
processing を意識したopenFrameworksのスタイル
![]()
こちらのサンプルからスタートしましょう。 blab_080423.zip
pre release v0.05 x-code FAT
├─ apps
│ └ blabexamples この中に解凍配置してください。
openFrameworks 座標
![]()
OpenGLのによってすべて描画されているが、processingなどと同様の画面座標になっている。気をつけてプログラムすれば、OpenFramewoksの機能を利用しつつOpenGLでの座標系での描画ももちろん可能。
OpenGL : 画面左下 (0,0)
X軸は画面右に向かっている。
Y軸は画面上に向かっている。
openFrameworks / processing: 画面左上 (0,0)
X軸は画面右に向かっている。
Y軸は画面下に向かっている。
c++ コメントアウト
![]()
// This line is commented out
/* These lines are
commented out
as you see */
c++ ファイルの種類
![]()
.h ヘッダファイル (.hxx なども同様)
定義ファイルといってもよいです。まずはこのファイルを読むと、どのような変数が使われているか、どのようか機能が備わっているかを知る(予測する)こととができる。
.cpp 実装ファイル (.cc , .cxx なども同様)
ヘッダファイル(定義ファイル)に記された関数がどのような動作をするか、が書かれている。
オブジェクト指向 c++
![]()
class (雛形)、インスタンス・オブジェクト(実体)
class (雛形)を書いて、インスタンス(オブジェクト)を作成し、プログラムの中で動作させる。
継承
既存のclass (雛形)を継承して、新たなclass (雛形)をつくれる。
文法
:: 名前空間
. ドットシンタックス
-> 参照
c++ クラス/ class の書式
![]()
複数の変数(記憶領域)をまとめたもの
関数(計算機能など)も一緒にまとめることができる
それぞれをメンバーと呼ぶ。
以下たとえば OrenoKurasu という名前のクラスの定義
class OrenoKurasu {
int mySeisu; //mySeisuという名の 整数メンバー
double myShousu; //myShousuuという名の 倍精度小数メンバー
void myFunction(){;} // myFunction という名の 引数を持たない () 戻り値の無い void メンバー関数
};
c++ クラス / openFrameworks と関連付けて使われそうなクラスの定義 の例
![]()
※注意
フォントやイメージ・テクスチャは、メインのクラス testApp でデータをロード初期化し、そこへの参照をメンバーとして持たせておくこと。ソフトが複雑になっていく上で、個々のクラスがフォントやイメージをロードするのはスマートではないし、同じデータの重複ロードもありえます。すべてOpenGLで描画が行われるため、テクスチャIDなどが初期化できないこともあり、フォントやイメージ・テクスチャは、メインのクラス testApp でデータをロードしましょう。class TextInsect {
public:
TextInsect(); // コンストラクタ
~TextInsect(); //デストラクタ
ofVector3 pos; // 自分自身の座標
ofImage *img; // テクスチャイメージへの参照
ofTrueTypeFont *font; // フォントデータへの参照
std::string title; // 文字の内容
void update(); // 座標の計算など
void draw(); // 描画
};
std ( Standard Template Library )
![]()
本家 / Standard Template Library プログラミング 日本語 (絶版書籍のweb公開版)
よくつかうもの
iostream
std::cout
<<
>>
std::endl
std::string
std::vector
イテレータ