2011年6月10日金曜日

Reaction Diffusion 3D

反応拡散系のシュミレーションをoFで書いてみた。3次元2成分のGray Scottモデルを使用。

参考は、Nervous Systemのこのコードと、このページ

最初、FitzHugh-Nagumoモデルに書きなおしていじってたけど、よさげなパラメータが見つからずgdgdになったので放置。結局、単純に元ネタをcppに翻訳した感じになった。

RD_GrayScott3D_Mesh.zip (使用しているアドオンはofxMarchingCubes、ofxSTL、ofx3DUtils、ofxVectorMath。)

GUIはきまぐれで自作。実はMarchingCubesも自作してたけど、後から見つけたアドオンのほうが出来がよかったのでお蔵入りになった。残念。

2011年5月7日土曜日

貝のやつ

HIGASHISMのひとを見てたら自分もやってみたくなったので、やってみた。

円錐からの整形は早々に諦めてwebでカンニングしてたところいい感じにまとまったサイトを発見したので参考にしつつcinderで実装してみた。

上記のサイトにのってるアルゴリズムは基本的な殻の生成に加え、瘤を発生させることができ、画像のようなトゲの生えた貝も描画できる。
以下がソース(SimpleGUIが必要。)

TheMuseumOfAllShells.zip

法線計算が力技でかなりひどく、また瘤の挙動が仕様か実装ミスか時々変なのが気になる。時間できたら、手を加えよう。

あと、gitにある最新のcinderで該当箇所のコメントアウト(TheMuseumOfAllShellsAppApp.cppの263行目くらい)を外してビルドするとメッシュを.obj形式で保存できるようになる。なかなか便利。

2011年4月18日月曜日

openframeworks上でのアンチエイリアスのかけ方

tipsを二つメモ。openframeworksでアンチエイリアスをかける方法と、ワイヤーフレームを描画する方法について

2011年4月4日月曜日

断面図の出力

3Dモデルの断面図を計算するコードをスケッチしてみた。



前回のsplitMeshをやっつけで書きなおしただけなのでコードは汚め。

3Dモデルのアウトプットとかに使うつもり。

ここからさらにsvgで出力し、
カッティングプロッタでプラ板等に切り出し、
積層していくとか。

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}; 
にしてやる。左から右に増加さえしていれば動くはず。

2011年2月28日月曜日

object_poolのdestroy()がなんだか遅い

object_poolでメモリを確保したshared_ptrをvectorに大量に追加し、clear()で解放しようとした際、フリーズしたかと思うほど時間がかかったので検証してみた。

どうやら、destroy()の中で使われているordered_free()がなんかのタイミングでオーバーヘッドになってるっぽい。

以下、無駄に長い検証用コード。

2011年2月27日日曜日

shared_ptrとintrusive_ptrをメモリプールをつかって高速化してみる

引き続き、C++のメモリ動的確保の話。
shared_ptrをどうしても高速で扱えるようになりたかったので、メモリプールを組み合わせて試してみた。

まんまこちらのサイトを参考にさせてもらった。

shared_ptrとintrusive_ptrの実装方法とかパフォーマンスとか

最近、C++のメモリの動的確保や管理の方法についていろいろ調べまわっていたので、わかったことをメモしておく。

まずは、スマートポインタについて。

スマートポインタとは、登録したオブジェクトがどこからも参照されなくなったさい、自動でdeleteを呼んでくれる便利クラス。ガベージコレクションの実装された言語ばかりさわってた自分にとって、これはすごくありがたい。

shared_ptrやauto_ptr、intrusive_ptr等が存在するけど、今回はshared_ptrとintrusive_ptrの使い方とパフォーマンスを比較してみた。

2011年2月26日土曜日

bloggerでSyntaxHighlighter

手始めに記事上のコードを見やすくするために、SyntaxHighlighterを導入してみる。

いろいろやり方はあるみたいだけど、今回はこちらの方の記事を参考にさせてもらった。
使用したい言語を追加しつつ、headタグ内に以下のコードをペースト

<!--start SyntaxHighlighter--> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'></script> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 
<script type='text/javascript'> 
  window.onload = function() {
  SyntaxHighlighter.autoloader(
      "js jscript javascript    http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js"
     ,"bash shell               http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js"
     ,"css                      http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js"
     ,"html xml xhtml           http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js"
     ,"cpp c                    http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js"
     ,"java                     http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js"
     ,"actionscript3 as3        http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js"
     ,"php                      http://alexgorbatchev.com/pub/sh/current/scripts/hBrushPhp.js"
  );
  SyntaxHighlighter.all();
};
</script> 
<!--end SyntaxHighlighter-->

これで準備完了。あとは、投稿画面のHTMLの編集で、コードを以下のようにpreタグで囲ってやる。
brush:のあとのhogeに言語に対応した名称を入れてやればいい。
<pre class="brush:hoge">
コードを記述...
</pre>

あと、htmlの記述にこちらの変換ツールを使用させてもらった。便利。

jsをアップロードしておきたいんだけど、どこにおけばいいんだろ?

2011年2月25日金曜日

このブログについて

プログラミングの勉強、メモ用にブログを使ってみることにした。

基本的にopenframeworksやcinder、processingのようなメディアアート系のフレームワークについての個人的メモを置く場所となる予定。

てきとーなこと書いて、だれかに優しく正してもらう、そんなブログにしたい。