例えば、VEX 用の foo.h というファイルを作り、この中に
float thrice (float a) {return a * 3;} /* 入力の3倍を返す */という関数を作ったとする。この関数を Attribute Wrangle で使うには
- foo.h を ~/houdini20.5/vex/include/ に格納し、
- Attribute Wrangle では、
#include "foo.h" @val = thrice (100.0);
などとするが、
使用したビルド: Houdini 20.5.550 だが過去バージョンでも同じ
hconfig -ap
コマンドラインで、 hconfig -ap を実行すると、Houdini が見に行く各種ディレクトリが表示される。このうち、下の方に HOUDINI_VEX_PATH に関する記述があり、簡単にまとめると、HOUDINI_PATH で参照されている各ディレクトリに vex/ ディレクトリを作成すれば、そこが参照される。
.h ファイルは、上記のどこかに vex/include というディレクトリを作り、その中に格納する(例: ~/houdini20.5/vex/include/ または $HSITE/houdini20.5/vex/include/。 $HIP は動的に変わるので望ましくない)。
math.h
vex/include の中に下記の要領で math.h を作ると、その中で定義された関数と、そこから参照される .h ファイル、またその .h ファイルで定義された関数は Wrangle ノードの中で宣言が不要になる。
- $HFS/houdini/include/vex/math.h を自分の vex/include にコピーし、そのファイルで #include foo.h を宣言。
- 上記のコピーした math.h から重複部分を削除、#include foo.h だけ残す。
- 自分の vex/include に空の math.h を作成、そこで #include "$HFS/houdini/vex/include/math.h" とする。
- これらいずれかの方法で作成した math.h に直接関数を定義していく。
1. math.h から重複部分を削除した場合
#ifndef __math_h__ #define __math_h__ #include "foo.h" #endif
2. 空の math.h を作り、$HFS 以下を逆参照する
#include "$HFS/houdini/vex/include/math.h" #include "foo.h"
この時、${HFS} とはしない。
3. math.h に直接関数を定義
上記の要領で作った math.h に関数を追記することも勿論可能。
#ifndef __math_h__ #define __math_h__ float thrice (float a) {return a * 3;} /* 入力の3倍を返す */ #endif
または
#include "$HFS/houdini/vex/include/math.h" float thrice (float a) {return a * 3;} /* 入力の3倍を返す */
上記のいずれかの方法で thrice() を定義すれば、Attribute Wrangle で #include "foo.h" の宣言は不要。
拡張子 .h, .vfl, .vex
ヘッダファイルには .h を使い、VEX コード、スニペットには .vfl を使う。 .vex はアセンブリ出力に使われる。
0 件のコメント:
コメントを投稿