2011年3月22日火曜日

三次元ボロノイ分割

half-edgeデータ構造の勉強に、Frederik Vanhoutte氏のコードをFlashへ移植してみた。



マウスプレスで母点追加、キープレスで更新のオンオフ

描画はテキトー
さらっと書くつもりが、完成間近で一度ミスってファイルを消したり、バグがとれなかったりで時間かかった。

2011年3月18日金曜日

Xcodeでパッケージにファイルがコピーされない

cinder上でGLSLをいじっていて
warning: no rule to process file '$(PROJECT_DIR)/hoge/FlatShader.frag' of type sourcecode.glsl for architecture i386
warning: no rule to process file '$(PROJECT_DIR)/hoge/FlatShader.vert' of type sourcecode.glsl for architecture i386
warning: no rule to process file '$(PROJECT_DIR)/hoge/NormalMap.frag' of type sourcecode.glsl for architecture i386
warning: no rule to process file '$(PROJECT_DIR)/hoge/NormalMap.vert' of type sourcecode.glsl for architecture i386
という警告がでてパッケージに該当するファイルがコピーされなくなった。

左のカラムの”ターゲット”を開くと、”ソースをコンパイル”にGLSLのファイルが入っていたので、”バンドルリソースをコピー”にドラッグする。そうすると警告がでなくなり上手く動くようになった。



単純だけど、いきなりなって焦った。 .vertや.fragって前からこうだったかな?

2011年3月10日木曜日

XcodeでMacPortsのフォルダにインクルードパスを通す

セットアップしたMacPortsを実際に使用してみる。ついでに、Xcodeでの使用方法もメモしとく。

とりあえず、Boostライブラリを例にする。
ターミナルから
sudo port install boost
とうつとインストールが始まるので、しばらく待つ。buildに時間がかかる。
これで、ライブラリのインストールは終了。

で、Xcodeでインストールしたライブラリを使用するには、インストール先である/opt/loaclまでのパスを設定してやればいい。

boostのヘッダーは/opt/local/include/に格納されているので、Xcodeのプロジェクト>プロジェクト設定の編集>ヘッダ検索パスに/opt/loacl/include/と追加する。
これで、Xcodeのプロジェクト上でboostが使用可能になる。

MacPortsのセットアップ手順

MacPortsとはオープンソース・ソフトウェアを手軽にインストール、管理できるアプリのこと。
ソースを探し、ビルドし、アップデートする手間が省けてすごく楽ができる。

最近、友人に聞かれたので、改めてまとめてみる。

まず、MacPortsのサイトから、インストーラをダウンロードしインストールする。

次に、環境変数 PATHにMacPortsで使用するフォルダの場所を追加する。PATHとはコマンドラインで各種のコマンドを手軽に呼び出すための設定。
ターミナルを起動して、
echo 'export PATH=$PATH:/opt/local/bin:/opt/local/sbin/' >> ~/.bashrc 
echo 'export MANPATH=$MANPATH:/opt/local/man' >> ~/.bashrc 
echo 'source ~/.bashrc' >> ~/.bash_profile 
と打ち込んだあと、ターミナルを再起動。

最後に、MacPorts自身をアップデートする。
sudo port selfupdate
といれて、パスワードをいれてやるとアップデートしてくれる。
※エラーで、javaのアップデートが必要とでた場合は、こちらを参照
※学校だとmacports上手く動かない、gitもなんか変な動きするし。ポートかな

2011年3月5日土曜日

openframeworksでポリゴンを選択する方法

前回のnurbsとhemeshを組み合わせて、なにか凝ったモノをつくろうとして挫折。そもそも、JOGLのnurbsが未実装だった。

というわけで、今回もTipsっぽい記事。openframeworkでポリゴンのマウスクリックや、マウスオーバーの判定を取る方法。

地道に座標を変換して照合していくことももちろん可能だが、openglにマウスピック用のAPIがすでに用意されているので、それを試してみた。

参考したのは以下のサイト


2011年3月2日水曜日

Cinder上でnurbsを描く

普通にcinder上でopenglのgluNurbsSurfaceを使ってみただけ。特に変わったことはしてないけど、nurbs自体をはじめてさわったので、メモ。

openglのnurbsをcinder上で使用する。
参考にしたサイトは以下。

コードはこちら(study_NurbsApp.cpp)
SimpleGUIをいれておく必要あり
例のごとく、上のサイトからコピペしていろいろいじくり回しただけだけど。

気になった点は、軽量化のためnurbsをdisplayListにいれようとした時、デフォルトで設定されてるテッセレーションの挙動がおかしくなったところ。もともと、分割されすぎて重く感じてたので
gluNurbsProperty(nurbs, GLU_SAMPLING_METHOD,  GLU_OBJECT_PATH_LENGTH);
で切っておいた。

あと、ノットベクトルはここを参照。エセ理系の自分にはちょっとキツイ。とりあえず、制御点数+次数だけの要素数をもつ配列をつくり、要素を単純増加させてやればよさそう。例えば、制御点数6、次数4のときノットベクトルは
GLfloat knot1[10]={0.0, 0.0, 0.0, 0.0, 0.33, 0.66, 1.0, 1.0, 1.0, 1.0};
GLfloat knot2[10]={0.0, 0.0, 0.0, 0.0, 0.33, 0.66, 1.0, 1.0, 1.0, 1.0}; 
とか、
GLfloat knot1[10]={0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
GLfloat knot2[10]={0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; 
にしてやる。左から右に増加さえしていれば動くはず。