反応拡散系のシュミレーションをoFで書いてみた。3次元2成分のGray Scottモデルを使用。
参考は、Nervous Systemのこのコードと、このページ。
最初、FitzHugh-Nagumoモデルに書きなおしていじってたけど、よさげなパラメータが見つからずgdgdになったので放置。結局、単純に元ネタをcppに翻訳した感じになった。
RD_GrayScott3D_Mesh.zip (使用しているアドオンはofxMarchingCubes、ofxSTL、ofx3DUtils、ofxVectorMath。)
GUIはきまぐれで自作。実はMarchingCubesも自作してたけど、後から見つけたアドオンのほうが出来がよかったのでお蔵入りになった。残念。
2011年6月10日金曜日
2011年5月7日土曜日
貝のやつ
HIGASHISMのひとを見てたら自分もやってみたくなったので、やってみた。
円錐からの整形は早々に諦めてwebでカンニングしてたところいい感じにまとまったサイトを発見したので参考にしつつcinderで実装してみた。
上記のサイトにのってるアルゴリズムは基本的な殻の生成に加え、瘤を発生させることができ、画像のようなトゲの生えた貝も描画できる。
以下がソース(SimpleGUIが必要。)
TheMuseumOfAllShells.zip
法線計算が力技でかなりひどく、また瘤の挙動が仕様か実装ミスか時々変なのが気になる。時間できたら、手を加えよう。
あと、gitにある最新のcinderで該当箇所のコメントアウト(TheMuseumOfAllShellsAppApp.cppの263行目くらい)を外してビルドするとメッシュを.obj形式で保存できるようになる。なかなか便利。
円錐からの整形は早々に諦めてwebでカンニングしてたところいい感じにまとまったサイトを発見したので参考にしつつcinderで実装してみた。
上記のサイトにのってるアルゴリズムは基本的な殻の生成に加え、瘤を発生させることができ、画像のようなトゲの生えた貝も描画できる。
以下がソース(SimpleGUIが必要。)
TheMuseumOfAllShells.zip
法線計算が力技でかなりひどく、また瘤の挙動が仕様か実装ミスか時々変なのが気になる。時間できたら、手を加えよう。
あと、gitにある最新のcinderで該当箇所のコメントアウト(TheMuseumOfAllShellsAppApp.cppの263行目くらい)を外してビルドするとメッシュを.obj形式で保存できるようになる。なかなか便利。
2011年4月18日月曜日
openframeworks上でのアンチエイリアスのかけ方
tipsを二つメモ。openframeworksでアンチエイリアスをかける方法と、ワイヤーフレームを描画する方法について
ラベル:
C++,
openframeworks,
Opengl
2011年4月4日月曜日
断面図の出力
3Dモデルの断面図を計算するコードをスケッチしてみた。
前回のsplitMeshをやっつけで書きなおしただけなのでコードは汚め。
3Dモデルのアウトプットとかに使うつもり。
前回のsplitMeshをやっつけで書きなおしただけなのでコードは汚め。
3Dモデルのアウトプットとかに使うつもり。
ここからさらにsvgで出力し、
カッティングプロッタでプラ板等に切り出し、
積層していくとか。
2011年3月22日火曜日
三次元ボロノイ分割
half-edgeデータ構造の勉強に、Frederik Vanhoutte氏のコードをFlashへ移植してみた。
マウスプレスで母点追加、キープレスで更新のオンオフ
描画はテキトー
さらっと書くつもりが、完成間近で一度ミスってファイルを消したり、バグがとれなかったりで時間かかった。
マウスプレスで母点追加、キープレスで更新のオンオフ
描画はテキトー
さらっと書くつもりが、完成間近で一度ミスってファイルを消したり、バグがとれなかったりで時間かかった。
2011年3月18日金曜日
Xcodeでパッケージにファイルがコピーされない
cinder上でGLSLをいじっていて
左のカラムの”ターゲット”を開くと、”ソースをコンパイル”にGLSLのファイルが入っていたので、”バンドルリソースをコピー”にドラッグする。そうすると警告がでなくなり上手く動くようになった。
単純だけど、いきなりなって焦った。 .vertや.fragって前からこうだったかな?
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ライブラリを例にする。
ターミナルから
これで、ライブラリのインストールは終了。
で、Xcodeでインストールしたライブラリを使用するには、インストール先である/opt/loaclまでのパスを設定してやればいい。
boostのヘッダーは/opt/local/include/に格納されているので、Xcodeのプロジェクト>プロジェクト設定の編集>ヘッダ検索パスに/opt/loacl/include/と追加する。
これで、Xcodeのプロジェクト上でboostが使用可能になる。
とりあえず、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とはコマンドラインで各種のコマンドを手軽に呼び出すための設定。
ターミナルを起動して、
最後に、MacPorts自身をアップデートする。
※エラーで、javaのアップデートが必要とでた場合は、こちらを参照。
※学校だとmacports上手く動かない、gitもなんか変な動きするし。ポートかな
ソースを探し、ビルドし、アップデートする手間が省けてすごく楽ができる。
最近、友人に聞かれたので、改めてまとめてみる。
まず、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がすでに用意されているので、それを試してみた。
参考したのは以下のサイト
というわけで、今回もTipsっぽい記事。openframeworkでポリゴンのマウスクリックや、マウスオーバーの判定を取る方法。
地道に座標を変換して照合していくことももちろん可能だが、openglにマウスピック用のAPIがすでに用意されているので、それを試してみた。
参考したのは以下のサイト
ラベル:
C++,
openframeworks,
Opengl
2011年3月2日水曜日
Cinder上でnurbsを描く
普通にcinder上でopenglのgluNurbsSurfaceを使ってみただけ。特に変わったことはしてないけど、nurbs自体をはじめてさわったので、メモ。
コードはこちら(study_NurbsApp.cpp)
※SimpleGUIをいれておく必要あり
例のごとく、上のサイトからコピペしていろいろいじくり回しただけだけど。
気になった点は、軽量化のためnurbsをdisplayListにいれようとした時、デフォルトで設定されてるテッセレーションの挙動がおかしくなったところ。もともと、分割されすぎて重く感じてたので
あと、ノットベクトルはここを参照。エセ理系の自分にはちょっとキツイ。とりあえず、制御点数+次数だけの要素数をもつ配列をつくり、要素を単純増加させてやればよさそう。例えば、制御点数6、次数4のときノットベクトルは
コードはこちら(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()がなんかのタイミングでオーバーヘッドになってるっぽい。
以下、無駄に長い検証用コード。
どうやら、destroy()の中で使われているordered_free()がなんかのタイミングでオーバーヘッドになってるっぽい。
以下、無駄に長い検証用コード。
2011年2月27日日曜日
shared_ptrとintrusive_ptrの実装方法とかパフォーマンスとか
最近、C++のメモリの動的確保や管理の方法についていろいろ調べまわっていたので、わかったことをメモしておく。
まずは、スマートポインタについて。
スマートポインタとは、登録したオブジェクトがどこからも参照されなくなったさい、自動でdeleteを呼んでくれる便利クラス。ガベージコレクションの実装された言語ばかりさわってた自分にとって、これはすごくありがたい。
shared_ptrやauto_ptr、intrusive_ptr等が存在するけど、今回はshared_ptrとintrusive_ptrの使い方とパフォーマンスを比較してみた。
まずは、スマートポインタについて。
スマートポインタとは、登録したオブジェクトがどこからも参照されなくなったさい、自動でdeleteを呼んでくれる便利クラス。ガベージコレクションの実装された言語ばかりさわってた自分にとって、これはすごくありがたい。
shared_ptrやauto_ptr、intrusive_ptr等が存在するけど、今回はshared_ptrとintrusive_ptrの使い方とパフォーマンスを比較してみた。
2011年2月26日土曜日
bloggerでSyntaxHighlighter
手始めに記事上のコードを見やすくするために、SyntaxHighlighterを導入してみる。
いろいろやり方はあるみたいだけど、今回はこちらの方の記事を参考にさせてもらった。
使用したい言語を追加しつつ、headタグ内に以下のコードをペースト
これで準備完了。あとは、投稿画面のHTMLの編集で、コードを以下のようにpreタグで囲ってやる。
brush:のあとのhogeに言語に対応した名称を入れてやればいい。
あと、htmlの記述にこちらの変換ツールを使用させてもらった。便利。
jsをアップロードしておきたいんだけど、どこにおけばいいんだろ?
いろいろやり方はあるみたいだけど、今回はこちらの方の記事を参考にさせてもらった。
使用したい言語を追加しつつ、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のようなメディアアート系のフレームワークについての個人的メモを置く場所となる予定。
てきとーなこと書いて、だれかに優しく正してもらう、そんなブログにしたい。
基本的にopenframeworksやcinder、processingのようなメディアアート系のフレームワークについての個人的メモを置く場所となる予定。
てきとーなこと書いて、だれかに優しく正してもらう、そんなブログにしたい。
登録:
投稿 (Atom)