楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル

log

2009.11.14 C++:モーションって…何だ

最近は長いことモーション読み込みと格闘しているのですが、
どうも一向に解決しそうにない感じです…。

動かすことには成功し、手足の伸びも解消できたのですが、
手足がなぜかばらばらな方向に回転してしまいます。
行列の設定がおかしいんでしょうけど、よく分からないのです。

それになぜか体の後ろの頂点だけ後ろにぐにょーんと
引っ張られてるという問題も発覚しました。
はじめは単なるウェイト設定ミスかと思ってましたが、
モデルを変えてみても同じでした。。

オフセット行列てなんだ…。クオータニオンてなんだ。
もはや分からないことが分からない状態!!

2009.11.12 C++:モーションは、やはり難しい

最近はモーションの読み込み部分に取り掛かっているのですが。難しい。
とある本を片手に、とりあえず読み込み部分を作ってみたものの
モーションは動かないは、行列の使い方がおかしいのか
動きの大きい部分がぐにょーんと伸びているは。。

参ったなぁ。とりあえず今はモーションの基本から勉強し直してるのですが、
原因を見つけるまで時間がかかりそうです。


なので、今回は制作とあまり関係ない話でも。
…しようかなと思いましたが止めにしとこうと思います笑。

昔みたいにまた映画などの考察をしようかと思ったのですが
最近は考察をしようとすると、結論を急ぐあまり余計なことまで
頭の中でぐるぐると反芻してしまうのを感じます。

ものづくりする動機さえ大切にしていれば、それでいいなと思える今日この頃。

2009.11.06 C++:モーション読み込み、やるぞー

ファイル 202-1.jpg

なんとなく背景を読み込ませてみました。

背景とキャラの比率があっていないので、…すごい、巨人だ笑。
一応これで基本的な読み込みはO3Dとほぼ同じになりましたが、
C++の方はテクスチャサイズがO3Dより全然大きいにも関わらず、
今のところ処理落ちが全くないです!すごい。

さて、いよいよモーション読み込みです。僕にとっては
全くの未開の地なので、どうなるのか分かりませんが
とりあえず少しづつやっていこうと思います。

僕のサイトにはほとんど人がこないので、技術的な話とかは
ほとんどメモ程度にしかまとめてないんだけど。ひょっとしたら
モーション周りは今でも興味ある人が少しくらいいるかな。

ManagedDirectXやXNAがでる前まではスキンメッシュは
ゲームプログラミングの山の一つといわれてたそうですが。
今だと簡単に読み込めるらしいですからね。

じゃあ何でわざわざC++でやってるんだよ!っていわれそうですが。
何というか。僕にとってC++は高校時代に挫折した苦い経験があるので
昔の自分を乗り越えるって意味も込めていたりします。

最近になって思うんですよ。「ようやく高3の頃のみんなの
技術に追いついたかなぁ」って笑。

2009.11.06 C++:Xファイルのマテリアル実装の仕様について

ファイル 201-1.jpg

ようやくXファイルの自作読み込みでマテリアルが読み込めるようになりました。
ついさきほど表示できたんですが、表示できたときは
「キターー」と思いました。うれしいなぁ。

ちなみにXフォーマットにあまり詳しくない人のために、
たかだかマテリアルの読み込みになぜここまで手間取ったのか
少しばかり説明しようかと思います。

Xフォーマットはタグテンプレートと呼ばれる要素単位で
テキストで保存されていて、マテリアル情報はMaterialというタグに、
メッシュとマテリアルとの関連付け情報はMeshMaterialListという
タグに登録されているのですが。

問題なのが、こいつらの登録方法がエクスポートするソフトによって
仕様がいくつも存在してしまうんです。

例えばMaterialListの中に直接Materialを登録しているXファイルもあれば、
MaterialListの外にMaterialListを登録して、MaterialListの下に
マテリアルインデックスの順番通りのマテリアル名だけ
記述しているものもあったり。
さらにはマテリアル名を登録しているXファイルもあれば、
マテリアル名を登録していないものもあったり。
駄目押しに、マテリアルインデックスが0からはじまるXファイルもあれば、
1からはじまったり、インデックスの途中でまた0を
はさんだりするXファイルもあったり。

それらの仕様に対応するようにこちらでプログラムを組まなきゃいけない訳です。
正直、「仕様をひとつにまとめんかい!」と毒づきたくもなりました。

自作読み込みをする上では、面倒なことこの上ないです、Xファイル。
しかし、それもようやくクリアできたのでとりあえず一安心です。

2009.11.04 C++:脱・頂点爆発

ファイル 200-1.jpg

なんとかXファイルの自作読み込みで頂点爆発させずに
読み込ませることができました。

何が原因だったかと思えば、SetStreamSourceのサイズ指定の
部分で頂点の構造体ではなく頂点バッファを渡しておりました。馬鹿だな…。

ただ、如何せんマテリアルとテクスチャの読み込みはまだ
行っていないので、今のところ木造の彫刻みたいになってます笑。

それと自作読み込みを表示させてみて、自作読み込みの方がなぜか
標準読み込みよりも身長の半分だけ高く表示されることに気づきました。
ちなみに画像では自作読み込みのモデルの方がやたら大きくみえるのは
大きい訳ではなくて、実際には上&手前にいるからです。
画像だと、分かりにくいですね。

はじめは自作読み込み関数がおかしいのかと思いましたが。
…よくよく考えてみるとカメラターゲットはモデルの座標位置に
合わせているので、標準読み込み側のモデルの中心が
画面の中心に来ていることを考えると…。どうやら標準読み込みの方が
自動でモデル中心をローカル原点に吸着させているようです。

改めて思うけど、やっぱり自作読み込みが一番安心するなあ。

余談ですが。最近特に寒くなってきたので、毛布を羽織ながら
制作しております。なので、全然手が進まないっ!
まいったな。

2009.11.02 C++:頂点爆発!と。

ファイル 199-1.jpg

現在、Xファイルの自作読み込みと格闘中です。
むこうのアイツにいってやりたい、マテリアルとサブセットの
クラスをいちいち分けるんじゃない、と。

とりあえず途中までは読み込めたようなので、試しに
やっつけRender関数を組んでみたところ…。(画像参照)

おー、これがうわさの頂点爆発か(遠い目)。


そういえば、マテリアル読み込み部分を調べてるときに
気がついたのですが、どうも僕のXファイルのマテリアルには
先頭にxof_defaultなる見慣れないマテリアルが存在していました。

それでマテリアル数を調べてみると、なぜか一つだけ少ない値を
とっていて、試しにそのマテリアル定義の部分だけ消して
プログラムを実行してみると…。何事もなく動くという。

うーん。何なんだろ。ボーン用マテリアルかと思ったけど
Xファイルはボーンじゃなくてフレーム構造で動かしてるし。
LWのスケルゴンの成れの果てかと思ったけど、だとしたら
何でマテリアル数としてカウントされてないんだろ。

標準のXファイル読み込みはxof_defaultのマテリアルが
存在した場合は読み飛ばす処理をさせてるんだろか。

さらに、今回は別の問題も発見。
何と一度スタンバイモードにしてから元に戻すとXファイルで
読み込んだデータだけ表示されなくなってしまいました。

おそらくデバイスロストあたりの問題なんだろけど、デバイスロスト時の
関数も既に導入済みなので、よく分かりません。

デバイスロストはレンダリングループ毎だけにチェックさせてるのですが、
デバイスロストも定期点検が必要なんですかね。

2009.10.31 C++:入力はいりました

C++のプログラムにようやくキー入力操作が入りました。
やっぱり動かせると楽しいな。
それとプログラム終了時にキャラクターの座標をSave.txtに
保存できるようにしてみました。ファイルの読み書きというやつです。

といってもまだ読み込み関数を作ってないけどね。
Xファイルの自作読み込みに使用するトークン関数とか
そのまま使えそうなので利用しようかな。

そういえば、最近はちらほらWeb3Dのデバッグテストとして
ちらほら紹介して回ったりしてるんだけど、「動かせましたー」という
人がいまのところ一人もいないのです…。

むむ。自分が使ってみたPCは2台中2台使えたのに。
まぁ、いいか。O3Dは自分専用ということで笑。

2009.10.31 C++:ガッ!!

ファイル 197-1.jpg

C++のプログラムをほんの少し更新しました。
タイトルは特に、ぬるぽ的な意味はありませんよ。

変更点はというと、
・スプライトのαブレンディングが無事成功しました
・モデルがライティングされるようになりました

これくらいです。スプライトαテストの件はD3DRS_ALPHAREFと
D3DRS_ALPHAFUNCのレンダーステートを設定することで
無事解決しました。

ただ、それだけだとモデルとの半透明合成が行われなかったのですが。
なぜかスプライト描画前にD3DRS_ZWRITEENABLEを
OFFにすることでαブレンディングされました。

Zバッファに書き込むかどうかなんてスプライトに関係ないかと思って、
今まで設定してなかったのですが、スプライトはスクリーン座標系を
使用してるからなのか、どうもOFFにするのが無難なようです。

…ええ、詳しくは分かりませんでした。

それとモデルのアンビエントがなぜかうまく設定されなかったので
描画時のマテリアルループ毎にアンビエントの設定をかませることで
解決させたんですが、これも謎。謎だらけだなあ。


そういえば、ぬるぽって何なんでしょうね?
今まであまり興味なかったけど、C++扱うのなら少しくらい調べてみるかな。

それと、今日はひさしぶりにニコニコ生放送を見ていたのですが。
といっても、(名前を出してしまうと)Land-Yさんの動画の
最後だけチラ見しただけなのですが。
今回はICEでUVを設定するということをやっていて、
行列関係の話で盛り上がっていたのですが。そのなかで
「テクニカルディレクター向きな話だな」
というコメント(だったかな?)があって。はじめてそんな役職があることを知りました。

正直なんだかいいなと思いました。てくにかるでぃれくたー。

10年後くらいにはなれるといいな。
けど、10年後も平のデザイナーとかやってそうですが…。。
先の目標ができた分見れてよかったなと思いました。

2009.10.30 C++:とりあえずXファイルを読み込み完了!

ファイル 196-1.jpg

とりあえずC++のプログラムはスプライトとスキンメッシュ無しの
Xファイルの読み込みを実装させてみました。

長かったー。

個人的にはスクリプトを記述するよりも、クラスを組むときに
どうやったら後々効率がよくなるか考えてる方が時間かかってしまいます。

スプライトの方はタイル番号を変更することでテクスチャに格納されている
フォント群に合わせてUVを変更できるようにしました。
けど、今のままだと1文字ずつ描画する度にDrawPrimitive()を
呼び出していて、複数文字を扱うと処理が重くなりそうなので、
文字部分のスプライトの頂点バッファは1つにまとめて
扱うように変更しようかなと、ただいま検討中。

Xファイルの読み込みも実は標準命令で読み込んでるし…。
前まで自作でやろうとしてましたが、時間がかかるので後回しということで。

それとXファイルを読み込んで気がつきましたが、なぜかスプライトの
アルファテストがうまくいってません。(画像参照)
カラーキーでアルファ抜きをしていて、アルファ抜きはできているのに
モデルの上に被さると透明部分が背景色になる。なぜ?

2009.10.27 C++:ひさしぶりのVisual C++

今日はひさしぶりにC++の方のプログラムを制作していました。

スクリプトを組んでいると、いつの間にか触ってもいない部分でエラーが
大量に発生してしまい、原因を探すのにかなり時間がかかってしまいましたが。

どうやらクラスの定義の最後に;を付け忘れたり、#defineの最後に
;を付けたりすると、全く別の部分でエラーが発生するということが分かりました。

普通気づかんよ。こんなバグ。
え?慣れてる人はそもそもこんなミスしないって?
それをいっちゃあお仕舞いだ。