lightwaveで単位プリミティブのcubeを
作ってflashへ移植。
ball同様、uv反転したので
オブジェクトをz軸で上下逆にしてobj書き出し。
マッピングするテクスチャのサイズが
ある程度の高さと幅がないと
描画が荒れる。
一面のサイズが等倍より少し小さいくらいだから
いけるかと思ったが、全然綺麗さがちがった。
右の方は、photoshopでむりやり引き延ばしているので
少し緩いのはそのため。
タグ「claptaps project」が付けられているもの
lightwabeからobjファイルを書き出してflashで再構築。
planeはうまくいったけど、ballでいきなり問題発生。
lightwaveでテクスチャマッピングしたら
オブジェクトから見て、正面と左面のマッピングが
左右逆になってる。
flash上では、そのままその2面だけ逆になって
素直に描画されているので
lightwave上でその部分のテクスチャマッピングを
反転すれば良いと考える。
1、lightwaveで単位プリミティブなballを作る
2、マップの新規UVテクスチャ アトラスでUV作成
3、色・質感編集のTでUVと画像を選択。
(この時点で左右逆になっている)
4、詳細の結合(統合)解除で反転させる部分の結合を加除
5、ポリゴン選択して該当部分をUV反転
(この時点でlightwaveできれいに表示される)
で、ここからまた問題発生。
flashへ持っていくと、上下が逆になってる。
(z軸で180°回転してる)
うそーーーーーーーー。。。。
なんか、UV反転か結合解除した時点で
こうなる事が判明。obj内の順番が代わるのだろうか?
結合解除した部分を再結合してみたりしたが
一回解除するともうダメみたい。
UVが回転してるのではなく、オブジェクト自体が回転してるので
しかたなく、lightwave上で上下逆になるようにz軸回転させてflashへ。
無事表示されました。
objファイル内のくくり方が代わるんだろうけど
これはどうにもならない気がするので、
しばらくは上記対応にするか。。。
忘れない為にメモ。
lightwaveからobjファイルを書き出す。
とりあえず一辺500mmのplaneを作った。正面の向きはxz方向。(lw上で回転させてxyにしてません。)
objファイルを分解すると
v:頂点座標
vt:uvt座標(一辺が0〜1で表される)
f:頂点座標/uvt座標/頂点番号
になっている。
fは頂点番号に対応する頂点座標ナンバーと
uvt座標ナンバーとなる・・・気がする。
ちなみに、fのuvt座標はlwでuvテクスチャをつくり
色質感編集でtでテクスチャ編集を立ち上げ、uvtextureと画像を選択してから
objファイルで書き出さないとブランクになった。
・・・lwよくわかってないので・・・すみません。
#### # # OBJ File Generated by LightWave3D # LightWave3D OBJ Export v2.3 # #### o a.obj mtllib a.mtl g default v -0.5 0 0.5 ・・・① v 0.5 0 0.5 ・・・② v 0.5 0 -0.5 ・・・③ v -0.5 0 -0.5 ・・・④ vt 0.0121951 0.0121951 ・・・① vt 0.0121951 0.987805 ・・・② vt 0.987805 0.0121951 ・・・③ vt 0.987805 0.987805 ・・・④ vn 0 1 -0 vn 0 1 -0 vn 0 1 -0 vn 0 1 -0 g Default usemtl Default s off f 2/3/1 3/4/2 4/2/3 1/1/4
vが頂点座標なので図にするとこんな感じ。
lightwaveの頂点座標は時計回りに書かれている・・・
といいきっていいのかわからないが、そういう事にする。
次にuvt座標。
これはuvテクスチャを書き出している時の
一辺を0〜1で表した時の座標値。
こんな感じ。時計回りではなかった・・・。
ちなみに、書き出していたuvテクスチャ。
んでここからが大事。
頂点座標とuvt座標のobjファイルに書かれている順番。
上で図にしているけど
頂点座標 uvt座標
①② ①③
④③ ②④
のようになっていて、
時計回りや反時計回りなどのルールがない。
ここで登場するのがfです。
f 2/3/1 3/4/2 4/2/3 1/1/4だと、
頂点座標の②のところへuvt座標の③
頂点座標の③のところへuvt座標の④
頂点座標の④のところへuvt座標の②
頂点座標の①のところへuvt座標の①
となっていて頂点座標に対応するテクスチャ座標(vt)の順番がわかる。
あとはdrawtrianglesの時に、順番をうまく入れ替えておけばOK!なはず。
多分こんな感じ。これで時計回りで場所が同期してるはず。
頂点座標②③④①
uvt座標③④②①
頂点番号①②③④
で、f1つで1面を構成している気がするので
f 2/3/1 3/4/2 4/2/3 1/1/4だと
頂点4つで四角形になっている。
多角形の一つの頂点から各頂点に線を引いて
三角形が何個できるかだが
両辺には線が引けないので4から2ひいて
2つ三角形が出来る。
三角形の頂点の結び方は
カリングに関係していて、これは自分で決めれるので
TriangleCulling.NEGATIVEのときに
反時計まわりに三角形をつくると画面に対し
正面で描画されることにする。
裏側は同じパス順で描画すると時計回りになるので描画されない。
TriangleCulling.NONEにしてると両面描画で
裏側は逆回りなので反転して描画される。
POSITIVEだと時計回りで正面を描画。
これで全てがつながった。気がする。
後は細かい部分を、つめてきます。
ふと、子供をわくわくさせる物を作りたいと思い
自分の書いた絵が踊りだす物を作る事にしました。
構想や、仕組みを忘れない為にブログに綴っていきます。
流れとしては・・・
1、3Dソフトでobjファイルとして書き出し。
2、flashで利用できるようにobjファイルを解析。
(アニメーションもつけたい!)
3、drawtrianglesで3D描画。
(planeなどアニメーションさせる場合は、xmlかなんかでタイムライン管理)
4、shapeにdrawしているので、それに対して移動/回転
5、各頂点に対して、各軸周りの回転で調整
6、shapeのz値に応じて、各頂点のパース調整
7、視点(カメラ)と描画物を内包するもの(shape)との距離/角度を計算。4、5、6辺りで反映できるようにしておく。
ちょっと、構想段階なので流れメモ。