2016-08-26

[]ビル壁面差し替えのノードの構成を整理メモ ビル壁面差し替えのノードの構成を整理メモ - Nao_uの日記 を含むブックマーク はてなブックマーク - ビル壁面差し替えのノードの構成を整理メモ - Nao_uの日記 ビル壁面差し替えのノードの構成を整理メモ - Nao_uの日記 のブックマークコメント

f:id:Nao_u:20160826172256p:image

前回のビル構築は手探りで作っててノード構成やアトリビュートに無駄が多かったので、整理と理解のために作り直したので経過をメモ。

全体のノード構成

f:id:Nao_u:20160826172257p:image

  • attributeCreate1で、プリミティブにprimIdxという名前で$PRのプリミティブ番号を設定
  • create_PolyDataでForeachでprimIdx毎にループして、面ごとの高さと幅、回転のデータを生成
  • foreach1ノードで面に第二引数のモデルを割り当てる

第二引数の右側ツリーは適当。

create_PolyData(Foreachノード)の中身

f:id:Nao_u:20160826172258p:image

  • polyframe1 で法線Nを生成
  • create_center で$CEX,$CEY,$CEZを使ってcenterという名前のアトリビュートにプリミティブの中心をセット
  • vop_points_create_sideVec で、VOPを使って横方向の基準ベクトルを生成(ポリゴン毎の幅を計算するのに使う)
  • vop_pimitive_create_size でポリゴンの幅と高さをプリミティブのアトリビュートとして計算
  • create_rotY で、ポリゴンのY軸回転の向きを atan2(@N.x,@N.z) で計算

vop_points_create_sideVec

f:id:Nao_u:20160826172259p:image

Y軸ベクトルとNの外積を取ってるだけ。

add attributeで生成して、set attributeに値を設定。setはi1にptnumを入れるのを忘れないように。

vop_primitive_create_size

f:id:Nao_u:20160826172300p:image

各頂点からcenter(ポリゴン中心)を引いたベクトルを、法線とsideVecそれぞれ内積をとって、最大値から最小値を引くことで幅と高さを求めて、プリミティブのアトリビュートに突っ込む

get attiributeはinputを「First Input」にするのをよく忘れるので注意。

foreach1(生成した面の情報を使って壁面を並べる)

f:id:Nao_u:20160826172301p:image

第2引数に生成したプリミティブのアトリビュートを使ってtransformするだけ。

prim("../each1/",$PR,"size",0) とかでeach1ノードの値をとってきてるが、こんなのでいいのか?という感覚が。もうちょっといいやり方はないものか。