2008年3月12日水曜日

blender - ファイルフォーマットを書き換えたい(12)

先人によると、頂点カラーは次のようになっているらしい。

T(ry退避予定地
http://d.hatena.ne.jp/kakk0u/

頂点カラーのAPI仕様みてるとどうもこいつもUVのように面単位で持ってるよう。
また頂点カラーだけのために頂点追加かと思ったが、面単位で頂点カラーを必要と
するケースも想像できないので同一頂点インデックス内で平均化してやることにした。


つまりこんな感じ↓


ちなみにBlender内部ではMColという構造体に色が入っているんだけど
typedef struct MCol {
char a, r, g, b;
} MCol;
とかなってるのに、実際は MCol.b = 赤、MCol.g = 緑、 MCol.r = 青、 MCol.a = アルファ
だった。

それと、MCol は実際の頂点数に関係なくtotface(全面数)x4個生成されている。

以上を踏まえた上で、エクスポートして、平均化してみたんだけど、なんかキレイにならなかった。

解決手段としては
1.面インデックスから頂点を共有する(頂点カラーはテクスチャにベイクとかで我慢)
2.面インデックスから頂点を共有しない


が考えられる。

面:1,2,3; 1,2,4; 5,6,7; の場合、
1だと、1,2の頂点が共有されるので 頂点は7個。
2だと、頂点は9個。

テクスチャ座標も面単位になってるし、面倒なので、2の頂点を共有しないほうで行こうと思う。データ量が増える(頂点数=面数x3になる)だけで、面数(=ポリゴン数)は同じなので、描画速度は変わらないと思うし。→やはり1で行くことに

----追記

というわけで、とりあえず共有はあきらめて、面数x3の頂点をぶち込んで、出来た。

Blenderでの表示


DirectXでの表示



1日悩んでいたのに、方針を変えたら20分で出来てしまった。(ファイルサイズは3.5倍になったが…)
しかも相当な勘違いをしていたことにも気づいた。頂点共有で、色の平均取る方法でもいけるかも。

----さらに追記

頂点共有でいけた!!!
色は平均とらなくても、ちゃんと全部同じになってるっぽい。

0 件のコメント: