c++

180度の回転がうまくいかない

mikoto形式のボーン読み込みは概ねできたのだが、 ボーンの第3の点(H点)が親と反対側についたときに生じる Z軸に対する180度回転を含む回転がうまく解決できない。 mikotoに記述されているクォータニオンと違う値になって あらぬ方向に曲がってしまう。 180…

mikotoのキーフレーム復元に成功

クォータニオンに不慣れなのもあって大きく手間取ったが なんとか前進。 まだ、浮動ボーンの扱いなどにおかしなところがあるようだが、mikotoフォーマットについて忘れないうちにメモしておく。 mkmファイルのQuaternionに記録されているキーフレーム値 # 例…

頓挫中・・・

うぅむ。 勘違いしていそうなところがひとつわかった。 進めるかもしれん。

スケルトンのツリー表示

モーションの続きを進める前にリファクタリングと表示強化。ソースはこちら。 http://github.com/ousttrue/kugutsu/tree/masterwxWidgetsなのでビルドが面倒だけども

wxAUIのサンプル

wxEvtHandler::Connectは普通のマクロを使った場合は Connect(wxEVT_MOVE, wxMoveEventHandler(Move::OnMove)); のように記述するがこれは this->Connect(wxEVT_MOVE, wxMoveEventHandler(Move::OnMove)); であり、thisに来たwxEVT_MOVEをthis->OnMoveと連結…

骨回転練習

功夫が不足したのでちょっと練習。 シンプルに再帰で実装。 一つ上までの累積クォータニオンとカレントのクォータニオンの取り回しが肝の様子。 ボーンひとつの最小限のデータは、 ひとつ上のローカル座標でのボーンの始点とボーン自身の回転情報っぽい。 参…

mkm形式の初期値

mkmの読み込み結果からクォータニオン適用をはじめようと思ったのだが まだ仕様が不明確な要素があった。 まず、Quaortenionの4つの要素が実部->虚部の順に並んでいるのか虚部->実部の順に並んでいるのかわからん。 試しに二つの棒をつないだだけのモデルを…

ボーンの再構成まで実装

ボーンオブジェクトからのツリー構造の再構成に成功した。 これを適当なポリゴン(いわゆるボーン風味のもの)で実体化させれば mqoからのボーン読み込みという段階は完了。 bone kosi momo[] hiza[] sune[] kurubusi[] asi[] tumasaki[] momo[] hiza[] sune[]…

はまった・・・

c++

しょうもないミスでありえないことが起こっているとなかなか見つからない。。。

mkmのモーション読み込み設計

前回まででボーン読み込みを実装し終わったのでようやく本題のモーション実装に入る。まず、mkmのパースと格納。 ボーン名とフレーム数をキーにボーンの回転情報をデータとしてフラットにベクタに突っ込むとしよう。 バイナリサーチできるように名前とフレー…

行分解器

c++

mkm読み込み向けに途中まで作ったmqoローダの部品を切り出してきた。 テキストフォーマットのファイルの読み込みはだいたい行毎に 読み込んでトークンにバラす処理になるのだが フォーマット毎に一から作るのも面倒だし、 モデルデータにboost::spritとかを…

オブジェクトツリーとマテリアルのリスト実装

ハードディスク内に眠っていたモデルひととおりを落ちずに 読み込めるようにした。 やっつけだけどマテリアルリストとオブジェクト階層を実装。 次回からmkm解読に入る。 今チラッと見たらQuaternionとか書いてあって難解そうに 見えるが果たしてどうか。 モ…

mqo読み込みを実装

とりあえずmqoの読み込みを実装した。 思ったより手間取ったが、ここまではやったことのあることばかりなのでハマる要素は特にない。 実際は、若干ハマったのだがw 中でも、テクスチャの取り回しはもう少し整理する必要がある。 mqoの中にはSJIS固定で文字列…

wxWidgetsのOpenGL雛形

次なる3Dプログラミングのテーマを決めた。 ボーンとかモーションとかそっち方面。 最近流行ってきている様子のmqo+keynoteによるmqoのmikoto方式のデータを 扱えるようにしてみたい。 モデルデータを公開されている人もいるので実験してみるのにも 楽しげだ…

Premake4の使い方

自分用のまとめを兼ねてドキュメントを作った。 http://ousttrue.github.com/sphinx/premake4/index.html premakeはいいものなのだがいまいち普及していない。 Gentooのportageに入っていないくらい普及していない。 premakeがどんな人向けかと言うと ideで…

Xbyak

assemberのことをググってたら面白いものを発見。 http://homepage1.nifty.com/herumi/soft/xbyak.html実行時にマシン語を生成するクラスライブラリらしい。 ひとつめのサンプルをやってみた(gcc-4.3 gentoo)。 http://labs.cybozu.co.jp/blog/mitsunari/xby…

Wu's Lineアルゴリズム

DDAで線をひきつつ透明度をY軸の小数部分から直接求める。 http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm http://freespace.virgin.net/hugo.elias/graphics/x_wuline.htm unsigned longをオーバーフローさせる実装 http://www.reportbase.co…

Gupta-Sproullアルゴリズム

さらに 「コンピュータグラフィックス 理論と実践」を参照して書いてみた。 前回の中点線分アルゴリズムを拡張してアンチエイリアス機能を追加した Gupta-Sproullアルゴリズム。動作原理は、ブレゼンハム的に線のピクセルを求めたのちに ピクセルと線分の中…

中点線分アルゴリズム

スキャンラインの材料とすべく 「コンピュータグラフィックス 理論と実践」を参照して線分アルゴリズムを書いてみた。 中点線分アルゴリズムはBresenhamアルゴリズムの亜種で 右と右上のピクセルのどちらを選択するかの判断を 両ピクセルの中点位置で線分の…

スキャンラインのソースを発見

http://www.lysator.liu.se/~mikaelk/doc/perspectivetexture/ 一番下にあるサンプルソースの線形補間のものを動かしてみた。 やってみると簡単ではあるのだがそのままではコンパイルできないので ちょっと困った。 どうせならそのままで動くものか、もう少…

スキャンラインへの道

なんとなく開始。 とりあえず最初のパーツとして2次元の三角形描画からはじめる。 GL_TRIANGLESのような頂点配列処理を想定して書いてみる。 三角形その1 ピクセル毎に2次元外積で三角形の内外を判定して描画するコード。 手元の本の最初に載っていた方法。…

PCL使ってみる

C++

http://www.xmailserver.org/libpcl.html とりあえず使い方をメモ。 #include <iostream> #include <pcl.h> struct co_wrap { void (*func)(co_wrap &arg); std::pair<int, int> result; bool isEnd; co_wrap(void(*_func)(co_wrap &arg)) : func(_func), isEnd(false) {} inline void r</int,></pcl.h></iostream>…

ファンクタと関数ポインタ両用の入れ物

c++

pthreadのラッパークラスをファンクタに対応させるべく、 clxのソースを見てどうやって関数ポインタとファンクタを一緒くたに扱っているのか調べてみた。 仕組みとしては仮想関数呼び出しをテンプレートクラスで継承する手法になっていた。 こんな感じ。 #in…

pthread練習

c++

そろそろやっとこうかと。 #include <pthread.h> #include <iostream> class Thread { pthread_t id; pthread_mutex_t mutex; pthread_cond_t condition; public: // used from main template<typename FUNC> void main_Start(FUNC func) { pthread_mutex_init(&mutex, NULL); pthread_cond_init(</typename></iostream></pthread.h>…

usingはよろしくないと思うのだが・・・

C#の修行中にサンプルコードを見てて気になったのだが、 せっかくnamespaceにわけてあるものを丸ごとインポートするのが氾濫しすぎていると思った。 C#のusing, C++のusing namespace, pythonのfrom HOGE import * あたりがそうなのだが 他にもあるだろう。 …

TinyJSONを改造してみた

{ // comment key: 99, HOGE: /* comment */ "FUGA" } というような2種類のコメントとクォートされていないkeyを許すように緩めた。 JSONの純粋性は損なわれたが実用性重視で。以下改造 diff --git a/include/tinyjson/tinyjson.hpp b/include/tinyjson/tiny…

データ構造を模索

UniformGridににいろんな種類の形状を突っ込む方法を模索中。 インターフェースとしてはこんなのがあって、 Shape { result intersect(const Ray &ray); }; 具体的には、TriangleとSphereを格納したい。 ゆくゆくは無限平面とか曲面とかintersect関数が定義…

traitsとtag dispatchがわかった

c++

やっとわかった。 これは、ライブラリを使うだけでなくて書いてみないとなかなかわからないな。 以下 p[0]とp.xというインタフェースの違うものを一緒くたに扱うための努力。 #include <iostream> namespace di { // 関数分岐用のタグ struct unknown_tag {}; struct u</iostream>…

効果が出ない

レイの発射部分をtbb経由に置き換えたのだが どうしても速度が出ない。 tbbでマルチスレッドにした方がだいたい2倍から2.5倍遅い。 その間CPU負荷は2つともほぼ100%になるので待ち合わせが 原因ではないように見える。 そこでgoogle performance toolsでプロ…

blocked_range2dで画像を作ってみた

blocked_range2dという2Dのサンプリングにうってつけのものがあるので使い方を調べてみた。 Tutorialによるとシングルコアでもリニアに走査するよりメモリのキャッシュヒット率が上がるのでよいものだというニュアンスのことが書いてあったがそうなのか。 #i…