2009-04-01から1ヶ月間の記事一覧

SkinnedMesh

とりあえずDirectXのサンプルのSkinnedMeshを読むことにした。 このサンプルに含まれる4種類のスキニングのうち、 Software Skinning をマスターすればOpenGLでも同様のことができるのではないかと。 いきなり躓いた。 Matrox G450でサンプルが動かねぇ・・…

また謎が

データは揃ったのだがいざコーディングを進めようとして固まった。 頂点ブレンディングとかよくわからん。 http://tpot.jpn.ph/t-pot/program/44_motion/motion.html を読んで修行する。 OpenGLのサンプルはないのかしら。

アンカーの判別処理を書いた。

判定アルゴリズムは、ある頂点に対してアンカーを構成するすべての三角形の平面の陰関数を解いて すべてが正、もしくは負であればアンカーの中にあるとみなすというもの。 を各三角形について算出(a, b, c, d値を求める)しておいて、対象の点(x, y, z)を代入…

ファイルダイアログメモ

c++

やっつけでglutに仕込むのに使った。 Windowsでは常にGetOpenFileNameが使えるが、 X11では何が入っているか判らないのが悩ましかったり。 適当なインタプリタ的なものからダイアログを開いて標準出力から結果を受け取るのがお手軽だろう。 Xdialogを使って…

freetypeで読み込んでcairoで描画

文字のレイアウトとutf8からunicodeへの変換はcairoに任せられる。 #include <iostream> #include <cassert> #include <ft2build.h> #include FT_FREETYPE_H #include <cairo-ft.h> class FreeType { FT_Library library_; FT_Face face_; int error_; public: FreeType(const char *file, int index=0) </cairo-ft.h></ft2build.h></cassert></iostream>…

font読み込み

cairo_select_font_faceだとシステムにインストールされたフォントしか使えないようなので、 ファイルからフォントを読み込む方法を調査。 freetypeからFT_Faceを渡してやれば任意のファイルからのフォントを扱えそうだ。 ただ、Windows向けに配布されている…

テクスチャを書き換える実験

freetypeで読み込んだフォントを使ってcairoでテクスチャを書いてOpenGLで使ってみるところまで。 適当に半透明とか丸い角を使うと見栄えがいい感じに。 cairo周りはこの辺りで切り上げてmikoto形式のモーションの作業に戻ろう。 次は、アンカーから対象頂点…

コンテキストメニューを作ってみた。

cairoでの日本語問題がクリアされたので 練習にOpenGLの中にコンテキストメニューを作ってみた。機能的には予定どおりのものが実装できたが テクスチャの管理なんかを簡潔に記述する方法を編み出す必要があるな。あと、 選択状態を変えるときにテクスチャを…

日本語を出す方法がわかった

ていうか出ない理由がわかった。 鍵はstrlenである。 こいつがutf-8の文字列に対してバイト数じゃなくてカラム数を返していた。 例えば「漢」なら3が返ってくる必要があるのだけど2が返ってくる。 うまく行くときと行かないときがあるので不思議だったがつい…

ピクセル位置を指定して描画する

2次元な文字情報など(いわゆるHUDか)を描画するときに 必要になるがよく忘れるのでメモ。 // 座標系を一時的に変更 setupView_(viewportWidth, viewportHeight); glPointSize(5.0f); glBegin(GL_POINTS); glColor3f(1.0f, 0, 0); // 左上原点のピクセル座標…

unittest重要w

やっとmkmの読み込み処理が完成した。 しかし、恐ろしい試練だった。 要は、クォータニオンを右からかけるか左からかけるかという 一貫性の問題だったわけだがこれを修正するのがえらく難航。 DirectXとかを使っていれば多分起きない問題だが、 自前で数学ラ…

minttyにIMEパッチを送ってみた

採用された。 subversionで最新版をチェックアウトしたらすでにIME対応になっております。 $ svn checkout http://mintty.googlecode.com/svn/trunk/ mintty-read-only utf8のときは設定でText-CodePageにUTF-8を cp932のときは「Use Font Encoding」を使え…

掌性が違う

D3DXQuaternionRotationAxisは関係なかった。 180度も関係ない。 うまくいかない原因は掌性の食い違いにありそうだ。 mqoが右手系なんで迂闊にもmkmも同じ掌性だとばかり思っていたがそうではないようだ。 mikotoはたぶんDirectXで書いているので左手系を使…

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のパースと格納。 ボーン名とフレーム数をキーにボーンの回転情報をデータとしてフラットにベクタに突っ込むとしよう。 バイナリサーチできるように名前とフレー…

mqo読み込みからのボーン構築

mkmを読み込んでクォータニオン回転とか書いてみようと思ったら、 mkmにはボーンの構成に関する情報が一切含まれていなかった。 親子関係くらい書いてあれば便利な気もするが、 フォーマットが複雑になる(ネストするか参照番号を振る必要があるか)し mqoに書…

行分解器

c++

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