claptaps project[2]

忘れない為にメモ。

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が頂点座標なので図にするとこんな感じ。

img_150120_1.jpg


lightwaveの頂点座標は時計回りに書かれている・・・
といいきっていいのかわからないが、そういう事にする。

次にuvt座標。
これはuvテクスチャを書き出している時の
一辺を0〜1で表した時の座標値。
こんな感じ。時計回りではなかった・・・。

img_150120_2.jpg


ちなみに、書き出していたuvテクスチャ。

img_150120_3.jpg



んでここからが大事。

頂点座標と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だと時計回りで正面を描画。

これで全てがつながった。気がする。
後は細かい部分を、つめてきます。