2009-01-01から1年間の記事一覧

GLSLスキニング実験

行列パレットの大きさが足りなくて、100を越えるボーンをもつpmdモデルを vertex shaderでskinningするのは難しいようだ。 無理なパターン attribute vec4 my_Vertex; attribute vec4 my_Uv; //attribute mat4 my_BoneMatrix[256]; // 間違い // 確保でき…

GLSLスキニング

glslでスキニングするサンプル http://www.codesampler.com/oglsrc/oglsrc_11.htm#ogl_skinning

TCPSocket練習

webrickプロキシに乗せるための試作httpクライアント。 前にNet::BufferedIO(内部用と書いてあるのを勝手に使っている)を流用していた部分がどうにも使い勝手がよろしくないので自作することにした。 TCPSocketを使えば楽ちん。 一挙に全データをreadしない…

やっとスキニングに成功

変換行列の作り方が間違っていたところをようやく修正。 結局、 http://r13n.spaces.live.com/ のツールからポーズ表示だけのミニマムな部分を抽出してオフセット行列や変換行列をダンプ。 で、自作のコードと食い違うところを追跡することで収拾した。 長い…

reverse_iterator

C++

いざ使おうと思ったらやりかたが分からなかったのでメモ。 #include <string> #include <iostream> int main() { std::string hello="hello world!"; for(std::string::reverse_iterator rit=hello.rbegin(); rit!=hello.rend(); ++rit){ std::cout << *rit << std::endl; } }</iostream></string>

行列が列優先な理由

http://hexadrive.sblo.jp/archives/20090406-1.html 最適化のためらしい。 どっちが列優先で行優先なのかどうも混乱するな・・・さらに http://hexadrive.sblo.jp/archives/20080404-1.html配列で行列を表現するときの方向が列優先か行優先かということで、…

新たにPMD/VMDビューワ発見

http://r13n.spaces.live.com/ OpenGLでbulletの物理演算も組み込んである。 さっそく試してみたんだが、 illegal instruction が出てしまった。sse乗ってないとbulletがダメらしい・・・orz bulletでsseオフにする方法を探すかLinuxで動かすかどっちかだな。

mio-0.1ソース解読

昨日1日はPyQT4のGUI解読に費やした。今日は本丸のVMD->BVH変換部分を解読中。printデバッグを駆使しながら読んでみたところ関数間の呼び出し関係はだいたいわかった。 事前に、 http://clogging.blog57.fc2.com/ http://sites.google.com/a/render.jp/vmdim…

キーフレームの補完

VMD実験前準備としてキーフレーム補完の実装と確認。 単純にvmdを読み込んで、横軸に時間、縦軸に各チャンネル(位置x, y, zとQuaternion(x, y, z, w)の7チャンネル)の値をプロットしてみた。 データ量が多いので見えるようにしておかないとprintデバッグでは…

スキニングその3

MIKOTO式のMQOをBVHモーションで動かす実験は中断することにした。 モデルとモーションで参照するボーンが一致していない場合のスキニングは、スキニング以外のところで難易度が高いことが判明。 命名規則による右左の自動展開だとか、大きさが違うとか、肩…

書式化文字列

後ろにtuple作るのがめんどくさかったのだが、求めていたのに近い方法を発見。 http://python.matrix.jp/tips/container/dict.html#id8 name='hoge' print 'hello %(name)s' % vars() # "hello hoge" vars()は知らなかった。 覚えておこう。 ついでに試して…

行列関連のgl関数をなるべく使わないでやってみる

スキニングの都合上glRotatefやglTranslatefを使わずに変換を実装する必要があるので下準備にこれらをglMultMatrixfで置き換えるテストコードを書いてみた。 さらにOpenGL3に準拠しようと思うとglMultMatrixfすらdeprecatedなので計算した行列をvertex shade…

スキニングその2

ついでなので夏前にやりかけだったMIKOTO方式もおさえることに。 今回の目的にフィットする素体をこちらからいただいてきました。 http://witchcraft-jp.sakura.ne.jp/mm/contents/mikoto_tips4.html 引き続き、 1. 各頂点のウェイトを計算する(Mikoto方式の…

スキニング

BVHの情報を収集していたらよい講座を発見。 http://www.cg.ces.kyutech.ac.jp/lecture/cg2/ BVHビューワがソース付きであるのでこれを足がかりにスキニングの理解を進めることができそうだ。とりあえず 1. ボーンのキーフレームアニメーション(BVH オイラー…

cmakeのprefix

$ cmake -DCMAKE_INSTALL_PREFIX=$HOME/local . とする。

procedual sky

ソースコード付きの説明を発見。 http://norsetto.890m.com/sky.phpあとで読む。 ちなみにdrawstuffの地面と空は単なる大きな四角ポリゴンだったw。 C++化しながらglutに乗せてみた。 skydomeの中にshaderで描画している。 shaderをこれから読む。

glutで自由落下

glutで実装してみた。 drawstuffが無いとなんとも味気ない画面に。 あれは、他にもマウス操作とかテクスチャ貼ったりと意外と機能あるしな。 z-upを止めてy-upに変更。 状態更新は、タイマーで定期的に呼ぶようにしてみた(ちゃんとFPSを維持するようにはして…

ことはじめ

ODE

簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング を読書中。 1個目のプログラムが存外に手間取った(環境整備的な意味で)。自由落下。 #include <ode/ode.h> #include <drawstuff/drawstuff.h> dWorldID g_world; #define STEP 0.01 dBodyID g_apple; </drawstuff/drawstuff.h></ode/ode.h>…

物理シミュレーションをかじってみる

ODE

簡単!実践!ロボットシミュレーション - Open Dynamics Engineによるロボットプログラミング作者: 出村公成出版社/メーカー: 森北出版発売日: 2007/05/18メディア: 単行本(ソフトカバー)購入: 5人 クリック: 89回この商品を含むブログ (10件) を見る最近い…

システムクラーッシュw

ここのところ調子の悪かったGentooがついに再起不能におちいってしまった。 emerge -uD worldがいろいろ問題があって完了していなかったのがまずかったらしい。 ~x86の呪いだ。 幸いKnoppixで起動してみたらディスクは無事だったが、システムの再構築は止む…

pmdとvmdインポータ

IKの読み込みまで完了。 足もちゃんと動くようになった。まだまだ不完全だがとりあえず http://github.com/ousttrue/blender-mmd-importer (2.49bじゃないと動かない) あとはテクスチャのアルファチャンネル対応と表情の読み込みをやれば完了。

骨選択

重なった骨が見にくいので八角形ボーンにしてみた。 さらに変な処理をして骨の親子関係がおかしかったところを整理した。 PMDは素直なデータ構造なので余計なことをせずにまっとうに組み立てればOK。 八角形にしたついでに、OpenGLのSELECT_MODEで骨を選択で…

ruby1.9のワンライナーと文字コード

pythonコードのインデントを2から4に変えるこんなことをやってみた。 $ find . -name "*.py" | xargs ruby -pe '$_.sub!(/^( )+/){|m| m*2}' -e:1:in `sub!': invalid byte sequence in UTF-8 (ArgumentError) 対象のファイルにutf-8のものとcp932にものが混…

標準のインデント

http://oldriver.org/python/pep-0008j.html スペースで4vimの設定をスペース2で使っていたので放置していたが、人様のコードを切り貼りするときに非常に不便なので悔い改めることにする。pythonだけスペース4に設定する。 とりあえず情報収集。 http://d.ha…

numpyの配列を受け取るCモジュールを作る

今作っているツールに次のようなコードがあるのだがかなり遅い。 # RGB配列とAlpha配列を合成してRGBAにするコード image=wx.Image(path) w=image.GetWidth() h=image.GetHeight() # RGB rgb=image.GetData() # Alphaチャンネル alpha=image.GetAlphaData() …

utf-8の\と¥(半角)

ASCIIの時のくせで同じコードポイント(0x5c)でフォントによって文字が違うのだと思っていたが、よく考えるとUNICODEなので別のコードが当たっているのであった。 UTF-8では \は0x5Cで ¥(半角)は0xC2A5 となる。 日本語ではUTF-8だとasciiの1バイト領域とマ…

pmdビューワみたいなのができてきた

いつもの自前主義が発動して夏前に書いていたMikotoモーションビューワ(頓挫中)みたいなのをまた作り始めた。 今度は、pmd/vmd形式が対象でwxPython(wx.GLCanvas)で書いている。wxAUIが使えれば何でもよかったが、OpenGLのコード残骸がディスクに残っている…

メモ

とりあえずprint debugが簡単にできるように def p(*args): for arg in args: MQSystem.println(str(arg)) p(MQSystem.getDocument()) メタセコイアのpython用にモジュールを追加する Metaseq.exeと同じディレクトリに import sys p(sys.path) に出てくるデ…

スクリプトのデバッグ

メタセコイアのスクリプトは素の状態だとエラー情報が一部しか表示されない。 例えば def p(*args): """ プリント関数 複数の引数を渡せる。 """ if len(args)==0: # 改行させる MQSystem.println("") return for arg in args: MQSystem.println(str(arg)) d…

3Dビューのテクスチャの実装が微妙だ・・・

通常モードではUVマッピングしか反映しない。 設定が他のものでも3DビューはUVマッピング状態w。 それよりマシなGLSLビューなのだが、これはこれで平行投影の投影軸がXY以外に変えても反映されない罠。 XZに指定してキャラモデリングのテンプレートに使いた…