六角大王(フリー版)データをPapervision3Dにくわしてみる。

カテゴリ
ブックマーク数
このエントリーを含むはてなブックマーク はてなブックマーク - 六角大王(フリー版)データをPapervision3Dにくわしてみる。
この記事をクリップ!
はじめまして、みなさん。
ライブドアで、ひっそりとflashのプログラミングを担当しております。

携わっているものとしては
livedoor Blog上でラクガキできる「ブログペイント」や
livedoor Wiki上でラクガキできる「ウキウキペイント」、
livedoor LisLogで投票できる「リスログflash」、
コスプレサイト Cureの「アクセス解析画面」などなど

もともとは、検索チームでバックエンドの
プログラムなどもしていました。
社会人になってから、もう10年を超えますが
なかなか芽も出ない。いっそのこと国に帰って、
本場、コーヒー豆農園で働こうかと考えたこともあります。

そんな僕が、今回テックブログを書くことになったのですが
今回は、
「六角大王(フリー版)データをPapervision3Dに食わす」に
ついてにしようと思います。
※以前、私本人がブログで上げた内容をちょっと解説。

メタセコデータを食わせるデモとか、
やっておられる方がおります。
そっちのが全然「ナウい!」ので
かなり、お恥ずかしいのですが。

※六角大王(フリー版)というのは
個人的に大好きな3Dモデル作成アプリです。
だいぶ古いしろものですが、WindowsXPで試してみましたところ
快適に使えます!! 是非是非、ウェブで探してみてください。

では、はじめます。
まず、簡単に3Dモデルの構成データを考えてみます。
・点
・点と点をつなぐ線
・共有点で構成された面(三角形)
(・点毎のuv情報)
(・マテリアル情報?)

上から3つは、立体になるためのデータですかね。
下から2つ忘れてください。今回話しません。
あと、もっといろいろ(モーションデータとか?)あるかもしれませんが。
まあ、なんとなくでも、うまくいくと思うので。

六角大王(フリー版)データには、点と線と面のデータがありました。
他には、面の色データとかカメラの位置情報とか、などなど。。。

Papervision3Dに食わすために気をつけたこと。

1.六角大王は4頂点を許容する。
2.六角大王は両面表示。
3.前提として、1メッシュモデル限定にする。


で、まず「1.」について。
四角形を三角形に分解するために線を1本データとして追加します。



「2.」については、面方向の統一をします。
面を構成している線の向きを一方通行にします。


※最終的に構成する線の向きから法線を計算します。

そして、隣接する面の共有線の向きが反対になる様に
各面を調整します。


そして、表面を判定しなくてはいけません。
今回は、1メッシュ限定にして考えると
うーん。。。ローテクしか思いつかない。。。

点の集合の中で、丁度真ん中を基準点として
各面の中心へベクトルを生成。(←基準点からのベクトル)

それぞれ基準点からのベクトルと各面の法線の内積をとって
プラスとマイナスの多数決を取り。プラスが多かったらそのまま。
マイナスのが多かったら裏表逆にする。

どうしても、それで駄目なら手動(引数としてフラグ渡し)で更に反転。
っていう感じにしました。

そして、その他ごにょごにょして完成ですが。
ごにょごにょした部分については割愛します。

一応、それなりに表示できるので、よかったかなと。

恥ずかしながら、こちらにサンプルを置いておきます。
car.rokとtire.rokが3Dモデルツール「六角大王」のファイルです。
※flashvarsのパラメータ「path」でパスを指定(ディレクトリまで)しています。
また、メインのasファイルは、RokSample.asとなっています。

Papervision3D.swcは必須です。