HU3DM 説明
このモジュールでは右手系を使う。
角度はラジアンで表す。
撮影される物体の最小単位は「パーツ」。それらの集合が「モデル」。その存在する空間が「ワールド」。
index |
HU3DM (HSP Universal 3D Module) は、HSPの標準命令だけを通してzソート、光の効果を考慮した簡易な3D描画を行うためのモジュールである。最大の特徴は標準命令のみで成り立っていることであり、従って標準のHSPランタイムはもちろんのこと、hsp3dish, hsp3dish.js等、HSPが満足に動くあらゆる環境で動作可能である。
しかし標準命令だけで座標計算,光の効果の計算を行っている為、容易に想像できることだがHSP用3Dプラグインと比してとんでもなく処理が遅い。ツール系アプリの小規模な3Dエフェクトが関の山で、激しい描画が要求されるアクションゲームには不向きである。
では一体何の役に立つのか?ということになるが、これは元々作者の数学的興味で作り始めたものであり、「ほとんど何の役にも立たない」と言わざるを得ないのが正直なところである。数学的な形状の立体を自分で組んだプログラムから生成し、それを動かして眺めてみたい、そんな動機で作り始めた。もし読者が同じ事を考えているなら、読者にとっていささかの価値はあるかもしれない。手に取った人それぞれの興味の赴くままに使ってもらえれば作者としてはそれで十分幸せである。
描画では「画家のアルゴリズム」を用いる。
パーツのzソートではパーツの重心とカメラの眼点の距離を用いる。
< 通常 >
まずモデル単位でzソートされ、次に各モデル毎にパーツ単位でzソートされる。
従って、モデルが絡み合うような複雑な状況は正しく描画できない。
パーツ単位でのソートのスイッチがモデル毎に用意されていて、必要に応じてoffにできる。
タイルが一面に並んだようなモデルではスイッチをoffにして無用な計算を減らすべきである。
モデルには0〜9の「z優先度」がある。数字が大きいほど優先度が大きい、つまり後で描画される。
モデル単位でのソートでは同じ優先度をもつもの同士で比較が行われる。
< 特殊 >
モデル単位でのソートではなくすべてのモデルのパーツ同士でzソートを行って描画することもできる。
専用の命令を使う。
モデルの存在する空間。
「ワールド」は座標空間であり、この座標系を「ワールド座標系」と呼ぶ。
座標軸を xw, yw, zw とする。
単位ベクトルを vi_w, vj_w ,vk_w とする。
xw,yw平面が「地平面」でzwの正の無限遠方が「天」。
ワールド一つ当たりのモデルIDの上制限は「UPLIM_ID_MODEL_PER_WORLD」で定まり、所定の手続きで変更できる。デフォルトで99。
ワールド構造体に属するモデル一つ当たりのパーツIDの上制限は「UPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCT」で定まり、所定の手続きで変更できる。デフォルトで99。
どちらにも上位の制約があり、ともに 2^16 = 65536 以下でなくてはならない。
この制約は「HU3DM_zSortAllVisiblePartsInWorldStruct」命令の内部構造に由来する。
また、どちらも小さければ小さいほどメモリ使用量を抑えられる。
< ワールド構造体 >
ワールド1つ分の情報を保持するのが「ワールド構造体」である。
これには「int体」と「double体」がある。
前者はint型データ、後者はdouble型データを保持する配列である。両者はセットで使う。
無意味な要素は任意の値で構わない。
< int体 >
[UPLIM_ID_MODEL_PER_WORLD+2, UPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCT+2, 21]int型配列。
< 要素(0,0,c) >
cの各値とそれに対応する情報は次の通り。
0 : UPLIM_ID_MODEL_PER_WORLD
1 : 保有するモデル数
2 : 保有する可視モデル数
< 要素(a,b,c) (a=1,2,...,UPLIM_ID_MODEL_PER_WORLD+1) >
第a-1番モデルの情報。
< 要素(a,0,c) >
cの各値とそれに対応する情報は次の通り。
0 : 第a-1番モデルの有無。(0,1)=(無,有)
1 : z優先度 (0〜9)
2〜5 : モデル構造体の(0,1)〜(0,4)に対応
< 要素(a,b,c) (b=1,2,...,UPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCT+1) >
第b-1番パーツの情報。
cの各値とそれに対応する情報はモデル構造体と同様。
< double体 >
[UPLIM_ID_MODEL_PER_WORLD+2,UPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCT+2,33]double型配列。
< 要素(a,b,c) (a=1,2,...,UPLIM_ID_MODEL_PER_WORLD+1) >
第a-1番モデルの情報。
< 要素(a,0,c) >
モデル全体の情報。
cの各値とそれに対応する情報は次の通り。
0,1,2 : モデル原点のワールド座標
3,4,5 : vi_m_(a-1)のxw,yw,zw成分
6,7,8 : vj〃
9,10,11 : vk〃
< 要素(a,b,c) (b=1,2,...,UPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCT+1) >
第b-1番パーツの情報。
cの各値とそれに対応する情報は次の通り。
0〜14 : モデル構造体のdouble体の(b,0)〜(b,14)と対応。
(15,16,17) : 第1頂点のワールド座標
(18,19,20) : 第2〃
(21,22,23) : 第3〃
(24,25,26) : 第4〃
(27,28,29) : 重心のワールド座標
(30,31,32) :
(第1→2頂点ベクトル)×(第1→4頂点ベクトル)と同じ向きを向く単位ベクトルのxw,yw,zw成分。つまり四角形の法線ベクトルの一つ。
カメラには「眼点」と「網膜」がある。
カメラは眼点を原点とする座標系をもち、これを「カメラ座標系」という。
また、
座標軸を xeye, yeye, zeye とする。
単位ベクトルを vi_cam, vj_cam, vk_cam とする。
「カメラの基本姿勢」とは、カメラの姿勢の基準である。この姿勢では、xeye,yeye,zeye 軸がそれぞれ xw,yw,zw軸と並行で、正の向きも一致している。
眼点のワールド座標を x_eye_cam, y_eye_cam, z_eye_cam とする。
vi_camの向きが「前」。
vk_camの向きが「上」。
vj_camの向きが「左」。
眼点から -vi_cam の位置に「網膜原点」があり、網膜原点を中心としてカメラ後方に展開する半径1の半球面が「網膜」である。
ワールド内の"点"が網膜につくる"点像"を如何にHSPのウィンドウに描画するかということが本モジュールの肝の一部である。
「yeye, zeye の成す平面」と平行で網膜原点を通る平面を「網膜標準接平面
(SRTP (Standard Retina Tangent Plane))」と呼ぶ。
この平面もまた座標系を持ち、これを「網膜標準接平面座標系
(SRTPCS)」と呼ぶ。この座標軸を次のように定める。
網膜原点を通り、yeye と並行で正の向きを同じくする座標軸を xsrtp とし、 zeye
と並行で正の向きを異にする座標軸を ysrtp とする。
また、この座標系の単位ベクトルを vi_srtp, vj_srtp とする。
網膜上の点像Iの位置を表現する方法を次のように定める。
Iから網膜原点(※Oとする)まで網膜に沿って移動する最短経路をPとし、その長さをRとする。
SRTPへのIの正射影をI'とし、OからI'へのベクトルを →OI' とする。
→OI' によってIの位置は完全に記述できる。
後の描画で使うために、→OI' と xsrtp の正の向きとの成す角を求め、θとしておく。
視野角は120°である。従って、網膜のうち実質的に使用される部分は網膜原点を中心として網膜に沿って距離π/3以下で到達できる範囲に限られる。
この部分を特に「有効網膜」と呼ぶ。
HSPユーザーはウィンドウ上で網膜原点に対応する位置と、「描画領域」(円形)の半径を決める必要がある。
前者を「(ウィンドウ上での)描画中心」、後者を「(ウィンドウ上での)描画半径」と呼ぶ。
デフォルトで前者は(320px,240px)、後者は400px。
描画領域の縁が有効網膜の縁と対応する。ウィンドウ一杯に描画するなら半径はウィンドウの対角線の長さの半分とすればよいが、
周囲が見えすぎて不都合なら描画半径を大きくしてカメラを後退させるなど、適宜工夫されたい。
点像Iに対するRとθが分かっていて、ウィンドウ上での描画中心を(dx,dy),
描画半径をdrとすると、
HSPウィンドウ上で点像Iに対応する点の座標は(dx + ((π*R*dr)/3)*cosθ,
dy - ((π*R*dr)/3)*sinθ)で決められる。
< カメラ構造体 >
カメラの位置と姿勢情報を保持するのが「カメラ構造体」である。
これには「int体」と「double体」がある。
前者はint型データ、後者はdouble型データを保持する配列である。両者はセットで使う。
無意味な要素は任意の値で構わない。
< int体 >
3要素配列。
(0),(1) : ウィンドウ上での描画中心の座標
(2) : 〃描画半径
< double体 >
21要素配列。
(0),(1),(2) : 眼点のワールド座標
(3),(4),(5) : vi_camのxw,yw,zw成分
(6),(7),(8) : vj〃
(9),(10),(11) : vk〃
(12),(13),(14) : 網膜原点のワールド座標
(15),(16),(17) : vi_srtpののxw,yw,zw成分
(18),(19),(20) : vj_srtpののxw,yw,zw成分
カメラ構造体のint,double体はそれぞれ「CAMSTRUCT_int@HU3DM_0」,「CAMSTRUCT_double@HU3DM_0」という名前である。
普通、ユーザーが直接編集することはないが、特別な事情で手を出す場合は壊さないように十分な注意が必要。
ワールドを無限遠方から無限遠方へと貫く平行光線。
あらゆるオブジェクトを通り抜け、減衰もしない。つまり影が表現できない。
普通はメタンの正四面体形のように無限遠方から炭素原子(原点)に向かって水素の方向から光を当てるイメージでワールドに光線を走らせ、
天からの光は強く、地面からの光は弱くしておけばよい。
正四面体の"3本の足"の配置は様々あるが、その一つについて計算すると地面からの3つの光線のベクトルはそれぞれ(-0.94,0,0.33),
(0.47,-0.81,0.33), (0.47,0.81,0.33) となる。強さは適宜調節する。
光線は必ず10本存在し、0〜9のIDが割り当てられる。
強さは0以上であるが、普通は0〜1とする。
方向ベクトルは大きさを1とする。
< 光線構造体 >
光線の情報を保持するのが「光線構造体」である。
(10,4)double型配列。
要素(a,b) (a=0,1,...,9) は第a光線の情報。
bの各値とそれに対応する情報は次の通り。
0 : 強さ (0≧) 普通は0〜1。
1 : 方向ベクトルのxw成分
2 : 〃yw
3 : 〃zw
光線構造体は「RAYSTRUCT@HU3DM_0」という名前である。
普通、ユーザーが直接編集することはないが、特別な事情で手を出す場合は壊さないよう十分に注意すること。
簡易的な光の効果を再現する。
光線のパーツ平面への入射角度とカメラの位置をもとにパーツの色を決めるだけである。
しかもその計算方法は私が勝手に考えた方法なので現実とは異なる。
とはいえ、素人目にはそれなりにリアルに見える。
効果を考慮するかどうかはモデル毎に決めることができる。
計算は「光の効果の計算.pdf」を参照。
光の効果を適用する場合で、かつテクスチャを使用する場合は透過色は不可能なので設定は無視される。
パーツの集合体。
UPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCTと、ワールド構造体に属さない個々のモデル1つ当たりのパーツIDの上制限は関係ない。
但し、後者をiとすると、ワールド構造体へインポートする際にiがUPLIM_ID_PART_PER_MODEL_IN_WORLDSTRUCT以下である必要がある。
モデルは「モデル原点」と、それを原点とする座標系をもつ。これを「モデル座標系」と呼ぶ。
第aモデルの座標軸を xm-a, ym-a, zm-a とする。
また、単位ベクトルを vi_m-a, vj_m-a, vk_m-a とする。
また、原点のワールド座標を xmo-a, ymo-a, zmo-a とする。
「モデルの基本姿勢」とは、モデルの姿勢の基準である。この姿勢では、xm,ym,zm 軸がそれぞれ xw,yw,zw軸と並行で、正の向きも一致している。
< モデル構造体 >
モデル1つ分のデータを保持するのが「モデル構造体」である。
これには「int体」と「double体」がある。
前者はint型データ、後者はdouble型データを保持する配列である。両者はセットで使う。
無意味な要素は任意の値で構わない。
パーツIDの上制限がiであるようなモデルの場合、下のようになる。
< int体 >
[i+2,21]int型配列。
< 要素(0,b) >
bの各値とそれに対応する情報は次の通り。
0 : i
1 : パーツのzソートスイッチ。(0,1)=(無効,有効)
2 : 保有するパーツ数
3 : 光の効果の適用スイッチ。(0,1)=(適用しない,する)
4 : 可視/不可視スイッチ。 (0,1)=(不可視,可視)
< 要素(a,b) (a=1,2,...,i+1) >
第a-1番パーツの情報。
bの各値とそれに対応する情報は次の通り。
0 : 第a-1番パーツの有無。(0,1)=(無,有)
4〜20 : パーツ構造体のint体の(0)〜(16)に対応。
< double体 >
[i+2,15]double型配列。
要素(a,b) (a=1,2,...,i+1) は第a-1番パーツの情報。
bの各値とそれに対応する情報はパーツ構造体のdouble体と同様。
モデル構造体は単なる配列にすぎない。ファイルに保存しておけば別のプログラムからロードして再利用できる。
四角形のみ使える。
4頂点すべてが視野内に入っている場合に限り描画できる。
平面である(ねじれていない)という仮定のもとで諸計算を行う。
大きくねじれている場合は正常に描画できないがエラーにはならない。
単色 or テクスチャ貼り が選べる。
ただし、使用するテクスチャは全てまとめて一つのウィンドウに用意しておかなくてはならない。
このウィンドウを「テクスチャ素材ウィンドウ」といい、デフォルトでは0番ウィンドウである。
< パーツ構造体 >
パーツ1つ分のデータを保持するのが「パーツ構造体」である。
これには「int体」と「double体」がある。
前者はint型データ、後者はdouble型データを保持する配列である。両者はセットで使う。
無意味な要素は任意の値で構わない。
< int体 >
17要素int型配列
(0) : 描画オプション1。(0,1)=(単色,テクスチャ)
(1) : 不透明度 (0〜255)
(2) : 光沢度 (0〜255)
< 単色の場合 >
(5,6,7) : 色のr,g,b値
< テクスチャ貼りの場合 >
(5,6,7,8) : 第1〜4頂点に対応する四角形テクスチャのx座標群
(9,10,11,12) : 〃y
(13) : 透過色有効フラグ。
(14,15,16) : 透過色のr,g,b値。
< double体 >
15要素double型配列
(0),(1),(2) : 第1頂点のモデル座標系座標
(3),(4),(5) : 第2〃
(6),(7),(8) : 第3〃
(9),(10),(11) : 第4〃
(12),(13),(14) : 重心のモデル座標系座標
※第1〜4頂点は環状に配置
※三角形にする場合は必ず第3,4頂点を一致させる。その他は一致させてはならない。
※第1,2,4頂点は同一直線上にあってはならない。0除算エラーが起こって復帰できなくなる。
各ポリゴンについてその描画の直前と直後に、ユーザーが事前に指定しておいたラベルにサブルーチンジャンプするようになっている。
描画直前のサブルーチンジャンプを「ポリゴン描画直前コールバック(PDCB1)」と呼び、直後のサブルーチンジャンプを「ポリゴン描画直後コールバック(PDCB2)」と呼ぶ。ジャンプ先ではモジュールが提供する様々な情報を取得することができる。
PDCB1を受けたときに「flg_ContinueDrawing@HU3DM_1091」変数に0を代入するとそのポリゴンの描画が1回だけキャンセルされる。
この機能を上手く利用することで高度な情報を取得したり、ユーザーの手で描画を細かくコントロールすることができる。(例えば特定のポリゴンのみに特殊な色を重ねたり、付近に文字を表示したり、または描画をキャンセルしてユーザー側で線分を描画することでワイヤーフレーム描画を実現したり。)
ジャンプ先では描画されようとしているポリゴンの情報を次の定数および変数から得ることができる。変数については書き換えも可能であるが、不正な値によりエラーが起こらないように注意が必要である。
「midplus@HU3DM_1091」(CONST) : そのポリゴンの属するモデルID+1
「pidplus@HU3DM_1091」(VAR) : 〃パーツID+1
「xarray_dst@HU3DM_1091」(CONST) : そのポリゴンの像の4頂点のHSPの画面上でのx座標群。要素(0)〜(3)は第1〜4頂点に対応する。
「yarray_dst@HU3DM_1091」(VAR) : 〃y座標群。〃。
「→EG@HU3DM_1091」(VAR) : 眼点からそのポリゴンの重心に向けてのベクトルのxw,yw,zw成分を格納した1次元3要素配列。
「len_EG@HU3DM_1091」(VAR) : 眼点とそのポリゴンの重心間の距離。
「α@HU3DM_1091」(VAR) : そのポリゴンの不透明度
「WORLDSTRUCT_int(midplus@HU3DM_1091,pidplus@HU3DM_1091,6)」(VAR) : そのポリゴンの光沢度
「I@HU3DM_1091」(VAR) : そのポリゴンが受ける光の強さ。詳しくは「光の効果の計算.pdf」参照。
「J@HU3DM_1091」(VAR) : そのポリゴンに反射してカメラに飛び込んでくる光の強さ。詳しくは〃。
「xarray_src@HU3DM_1091」(VAR) : そのポリゴンのテクスチャの4頂点のウィンドウ上でのx座標群。要素(0)〜(3)は第1〜4頂点に対応する。
「yarray_src@HU3DM_1091」(VAR) : 〃y座標群。〃。
2014/11/1 現在、android版hsp3dishではポリゴン描画直前後コールバック機能が使えない。
使おうとしてエラーになるわけではないが、コールバック先で何も描画できない。(line等の命令を実行しても画面に反映されない。)
hsp3dish側の問題であると思われる。(ユーザー定義命令からのgosub先で描画が失敗しているのではないか?)いずれ修正されるかもしれない。
尚、コールバック先で描画キャンセル要求の発動は可能である。
モデルを撮影するためにはそれに属するパーツのワールド座標を計算しなくてはならない。モデル座標系からワールド座標系への変換である。
モデル原点のワールド座標とモデル座標系の単位ベクトル(=姿勢情報)が決まれば、パーツのワールド座標は決まる。
撮影前の段階で全てのパーツのワールド座標や法線ベクトルが計算されている必要がある。
ここで重要なのは、"撮影前の段階で"計算が完了していれば十分であるということ。
複数の幾何操作を組み合わせて段階を踏む場合(例えば 平行移動 → 回転 →
変倍)、各段階毎にモデル原点とモデル座標系単位ベクトルの情報を書き換える必要があるが、パーツのワールド座標や法線ベクトルを計算するのは最終段階の幾何操作を完了させる時だけで十分である。各段階毎に計算する必要いし、そうしていたのでは無駄な計算に時間を食われてしまう。
そういうわけで、本モジュールではモデルの幾何操作の命令の多くに「モデルのパーツの幾何パラメータ演算スイッチ」が付いている。これがONの時のみ計算を行うようになっている。幾何操作の最終段階の命令でこのスイッチをONにし、それより前の段階ではOFFにする。そうすれば無駄な計算をせずに済む。尚、幾何操作の最終段階の命令でスイッチをOFFにしていると、パーツのワールド座標が更新されず古いままなので、「過去の状態」が描画されることになる。
提供するルーチンでは((できない)または(無用なエラーチェックで低速になる))ような操作はワールド構造体を直接編集することで可能になるかまたは高速化される。
ワールド構造体のint,double体はそれぞれ「WORLDSTRUCT_int@HU3DM_0」,「WORLDSTRUCT_double@HU3DM_0」という名前である。
手を出す際は構造体を壊さないよう十分に注意すること。
しばしば、一度作成したモデルをファイルに保存して別の機会にロードして使用したいと思うことがある。
この要求に対応するため、本モジュールは「モデルファイル」の入出力をサポートする。
モデル構造体のint,double体と、テクスチャその他の情報をまとめたファイルがモデルファイルである。推奨拡張子は「hmf」(HU3DM Model
File)。
これのロード・セーブは専用命令で行うのでユーザーは普通、ファイルの構造を知っておく必要はない。
< モデルファイルの構造 >
以下ではファイルデータの先頭をインデックス0として、aバイト目〜bバイト目の区間を [a,b] と表記する。
hmfファイルの構造は下の通り。
[0,3] : パーツIDの上制限(4byte 非負整数)。この値を PidUpLim とする。
[4,5] : テクスチャ画像ファイル情報(※後述のテキストデータ)のデータサイズ(2byte 非負整数)。この値を Size_TexInfo とする。
[6,6 + 4*(PidUpLim+2)*21] : int体
[i0,i0 + 8*(PidUpLim+2)*12] : double体。(※i0 = 6 + 4*(PidUpLim+2)*21)
[i1,i1 + Size_TexInfo] : テクスチャ画像ファイル情報(※後述のテキストデータ)。(SJIS text)。(※i1 = i0 +
8*(PidUpLim+2)*12)
これは、モデルが参照するテクスチャを格納した画像ファイルのパスと、画像の希望読み込み先ウィンドウIDおよび座標を保存した単なるテキストデータである。
希望する画像ファイルの個数だけの行数を持ち、改行コードは(行数-1)個。(つまり最後の行末に改行コードはなく、1つのヌル文字で終わる。)
各行は次のように表現されている。
TexRelativePath|w,h|wid|px,py
TexRelativePath : hmfファイルのあるディレクトリを基準とした、画像ファイルの相対パス。
w,h : その画像ファイルの幅と高さ
wid : 希望読み込み先ウィンドウID
px,py : 希望読み込み先座標
(例)
Metal.png|256,128|1|0,0
第1,2水準ルーチンがある。
第1水準は一般ユーザー向け。
第2水準は内部ルーチン。スキルユーザー向け。
< 第一水準 >
index
|
ルーチン名 | 説明 |
HU3DM_init | モジュールの初期化 [書式] HU3DM_init
|
HU3DM_setDrawCenterOnWindow | ウィンドウ上での描画中心の設定 [書式] HU3DM_setDrawCenterOnWindow x,y x,y : 座標
|
HU3DM_setDrawCircleRadius | ウィンドウ上での描画半径の設定 [書式] HU3DM_setDrawCircleRadius r r : 半径
|
HU3DM_setPDCBL | ポリゴン描画直前後コールバックラベルの設定 [書式] HU3DM_setPDCBL L1,L2 L1 : 直前コールバックラベル [備考] L1,L2 にそれぞれ
*NullLabel@HU3DM_0,*NullLabel@HU3DM_0 を指定することでコールバックを無視できる。
|
HU3DM_setRays | 光線の設定 [書式] HU3DM_setRays k,i ,x,y,z k : 光線番号 [実行後のstatの値] (0,1)=(成功,引数不正)
|
HU3DM_setCamPos | カメラ眼点のワールド座標の設定 [書式] HU3DM_setCamPos x,y,z, opt x,y,z : ワールド座標または変位
|
HU3DM_setCamPosture_1 | カメラの姿勢の決定。 ロール,ピッチ,ヨーで表現。この順に回す。 [書式] HU3DM_setCamPosture_1 r,p,y, opt r,p,y : ロール,ピッチ,ヨー
|
HU3DM_setCamPosture_2 | カメラの姿勢の決定。 「上」を表すベクトル(upベクトル)と注視点によって姿勢を決定。 [書式] HU3DM_setCamPosture_2 a,b,c ,x,y,z a,b,c : upベクトルのxw,yw,zw成分 [実行後のstatの値] (0,1) = (成功,数学的エラー) [備考] 眼点→注視点ベクトルがupベクトルと平行な場合は処理できない。
|
HU3DM_setCamPosture_3 | カメラの姿勢の決定。 まず、オプション指定があればカメラの姿勢を基本姿勢にセットする。指定がなければそのままとする。 その後、基準系を常に「回転前のカメラ座標系」としてカメラを回転させる。 [書式] HU3DM_setCamPosture_3 θ,φ,ψ, opt θ,φ,ψ : 回転角(※解説参照) [解説]
回転前のカメラ座標系の座標軸をXeye,Yeye,Zeyeで表し、カメラ座標系そのものの座標軸をxeye,yeye,zeyeで表すとする。
|
HU3DM_setCamPosture_4 | カメラの姿勢の決定。 vi_cam, vj_cam, vk_camを直接指定する。 甚だしく間違った値を設定すると以後の各種計算で異常が発生する。 [書式] HU3DM_setCamPosture_4 xi,yi,zi, xj,yj,zj, xk,yk,zk
|
HU3DM_rotateCam | カメラ座標軸周りの回転 [書式] HU3DM_rotateCam opt,θ opt : 軸指定オプション (1,2,other) = (xeye, yeye, zeye)
|
HU3DM_setTexSrcWnd | テクスチャ素材ウィンドウIDの指定 [書式] HU3DM_setTexSrcWnd wid wid : ウィンドウID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_getPartsNumInModelInWorld | ワールド中の指定されたモデルのパーツ数を取得する [書式] val = HU3DM_getPartsNumInModelInWorld(mid) mid : モデルID [戻り値] (-1,other) : (引数不正, パーツの数)
|
HU3DM_getMaxPartIDInIndepModel | ワールドから独立したモデルのパーツIDの最大値を取得する。 すなわち、最後尾のパーツのIDを取得する。 [書式] val = HU3DM_getMaxPartIDInIndepModel(MODEL_I) MODEL_I : モデル構造体のint体 [戻り値] (-1,other) = (引数不正, 最大値)
|
HU3DM_getMaxPartIDInModelInWorld | ワールド中の指定されたモデルのパーツIDの最大値を取得する。 すなわち、最後尾のパーツのIDを取得する。 [書式] val = HU3DM_getMaxPartIDInModelInWorld(mid) mid : モデルID [戻り値] (-1,other) = (引数不正, 最大値)
|
HU3DM_slideTexRefPosInIndepModel | ワールドから独立している指定されたモデルの全てのパーツのテクスチャ参照先座標に定数を加える [書式] HU3DM_slideTexRefPosInIndepModel MSTRUCT_INT, dx,dy MSTRUCT_INT :
モデル構造体のint体 [備考] 構造体のチェックはしていない。不正なデータは致命傷になる。
|
HU3DM_setModelIDUpperLimitPerWorld | ワールド1つあたりのモデルIDの上制限を設定する [書式] HU3DM_setModelIDUpperLimitPerWorld n n : 上制限 [実行後のstatの値] (0,1,2) = (成功,引数不正,中止) [備考] n以上のIDのモデルが既に存在している場合は処理は中止される。
|
HU3DM_setPartIDUpperLimitInIndepModel | ワールドから独立したあるモデルのパーツIDの上制限を設定する [書式]
HU3DM_setPartIDUpperLimitInIndepModel
MSTRUCT_INT, MSTRUCT_DBL, n [実行後のstatの値] (0,1,2) = (成功,引数不正,中止) [備考] n以上のIDのパーツが既に存在している場合は処理は中止される。
|
HU3DM_setPartIDUpperLimitPerModelInWorldStruct | ワールド構造体に属するモデル1つあたりのパーツIDの上制限を設定する。 [書式] HU3DM_setPartIDUpperLimitPerModelInWorldStruct n n : 上制限 [実行後のstatの値] (0,1,2) = (成功,引数不正,中止) [備考] n以上のIDのパーツが既に存在している場合は処理は中止される。
|
HU3DM_scootOverPartIDInIndepModel | ワールドから独立しているモデルにおいて、空きパーツIDが後方に集中するようにデータを並べ直す。 [書式]
HU3DM_scootOverPartIDInIndepModel
MSTRUCT_I,MSTRUCT_D [戻り値] モデルのパーツ数 [備考] 構造体のチェックはしていない。不正な構造体を渡すと致命傷になる。
|
HU3DM_scootOverPartIDInModelInWorld |
ワールドに属する指定されたモデルにおいて、空きパーツIDが後方に集中するようにデータを並べ直す。 [書式]
HU3DM_scootOverPartIDInModelInWorld mid [戻り値] (-1,other) = (引数不正,モデルのパーツ数)
|
HU3DM_importModelToWorldStruct | ワールド構造体にモデルをインポートする。 モデルは基本姿勢で配置される。 [書式] HU3DM_importModelToWorldStruct mid, MODEL_I,MODEL_D, zp mid : 登録先ID [実行後のstatの値] (0,1,2) = (成功,引数不正,中止) [備考] モデル構造体のパーツIDの上制限がワールド構造体のそれを上回る場合、処理は中止される。
|
HU3DM_exportModelFromWorldStruct | ワールド構造体からモデルをエクスポートしてモデル構造体を作成する [書式] HU3DM_exportModelFromWorldStruct mid, MODEL_I, MODEL_D mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正) [備考] MODEL_I, MODEL_D配列は目的のモデルを格納するのに必要な最小限の大きさで確保される。
|
HU3DM_deleteModelInWorldStruct | ワールド構造体からモデルを削除する [書式] HU3DM_deleteModelInWorldStruct mid mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_importPartToModelInWorldStruct | ワールド構造体に属するモデルにパーツをインポートする [書式] HU3DM_importPartToModelInWorldStruct mid,pid, PART_I,PART_D mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_exportPartFromModelInWorldStruct | ワールド構造体からパーツをエクスポートする [書式] HU3DM_exportPartFromModelInWorldStruct mid,pid, PART_I,PART_D mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_deletePartInModelInWorldStruct | ワールド構造体からパーツを削除する [書式] HU3DM_deletePartInModelInWorldStruct mid,pid mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setModelPartsZSortSwInWorldStruct | ワールド構造体に属するモデルのパーツのzソートスイッチを設定する [書式] HU3DM_setModelPartsZSortSwInWorldStruct mid, sw mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setModelLightEffectSwInWorldStruct | ワールド構造体に属するモデルの光の効果の適用スイッチを設定する [書式] HU3DM_setModelLightEffectSwInWorldStruct mid,sw mid : モデルID
[実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_visualizeModelInWorldStruct | ワールド構造体に属するモデルの可視/不可視を設定する [書式] HU3DM_visualizeModelInWorldStruct mid, sw mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setModelZPriorityInWorldStruct | ワールド構造体に属するモデルのz優先度を設定する [書式] HU3DM_setModelZPriorityInWorldStruct mid, zp mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_slideTexRefPosInModelInWorld | ワールド構造体に属する指定されたモデルの全てのパーツのテクスチャ参照先座標に定数を加える [書式] HU3DM_slideTexRefPosInModelInWorld mid, dx,dy mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartDrawOpt1InWorldStruct | ワールド構造体に属するモデルのパーツの描画オプションを設定する [書式] HU3DM_setPartDrawOpt1InWorldStruct mid,pid, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartOpacitasInWorldStruct | ワールド構造体に属するモデルのパーツの不透明度を設定する [書式] HU3DM_setPartOpacitasInWorldStruct mid,pid, op mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartDOBInWorldStruct | ワールド構造体に属するモデルのパーツの光沢度を設定する [書式] HU3DM_setPartDOBInWorldStruct mid,pid, dob mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartColorInWorldStruct | ワールド構造体に属するモデルのパーツの色を設定する [書式] HU3DM_setPartColorInWorldStruct mid,pid, r,g,b mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartTexSrcPosInWorldStruct | ワールド構造体に属するモデルのパーツのテクスチャのウィンドウ座標を設定する [書式] HU3DM_setPartTexSrcPosInWorldStruct mid,pid, xarry, yarry mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_enablePartTexTrnsprntClrInWorldStruct | ワールド構造体に属するモデルのパーツの透過色の有効/無効を設定する [書式] HU3DM_enablePartTexTrnsprntClrInWorldStruct mid,pid, sw mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartTexTrnsprntClrInWorldStruct | ワールド構造体に属するモデルのパーツの透過色を設定する [書式] HU3DM_setPartTexTrnsprntClrInWorldStruct mid,pid, r,g,b mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setPartVertexModelPosInWorldStruct | ワールド構造体に属するモデルのパーツの頂点のモデル座標を設定する [書式] HU3DM_setPartVertexModelPosInWorldStruct mid,pid, xarry, yarry, zarry, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正) [備考] 頂点は環状に配置すること。
|
HU3DM_enumPartsInIndepModel_sphere |
ワールドから独立しているモデルにおいて、指定された点から一定距離(未満/以内/以上/超過)離れた位置に重心を持つパーツを列挙する。 [書式]
HU3DM_enumPartsInIndepModel_sphere
MSTRUCT_INT,MSTRUCT_DBL, pidlist, x,y,z, r,opt [実行後のstatの値] (-1,other) : (引数不正, 列挙されたパーツの数) [備考] 構造体のチェックはしていない。不正な構造体を渡すと致命傷になる。
|
HU3DM_enumPartsInModelInWorld_sphere |
ワールドに属する指定されたモデルにおいて、指定された点から一定距離(未満/以内/以上/超過)離れた位置に重心を持つパーツを列挙する。 [書式]
HU3DM_enumPartsInModelInWorld_sphere
mid, pidlist, x,y,z, r,opt [実行後のstatの値] (-1,other) : (引数不正, 列挙されたパーツの数)
|
HU3DM_enumPartsInIndepModel_plane |
ワールドから独立しているモデルにおいて、指定された点と法線ベクトルで定まる平面の(正領域,平面上及び正領域)に重心を持つパーツを列挙する。 [書式]
HU3DM_enumPartsInIndepModel_plane
MSTRUCT_INT,MSTRUCT_DBL, pidlist, x,y,z, vi,vj,vk, opt [実行後のstatの値] (-1,other) : (引数不正, 列挙されたパーツの数)
[備考] 構造体のチェックはしていない。不正な構造体を渡すと致命傷になる。
|
HU3DM_enumPartsInModelInWorld_plane |
ワールドから独立しているモデルにおいて、指定された点と法線ベクトルで定まる平面の(正領域,平面上及び正領域)に重心を持つパーツを列挙する。 [書式]
HU3DM_enumPartsInModelInWorld_plane mid,
pidlist, x,y,z, vi,vj,vk, opt [実行後のstatの値] (-1,other) : (引数不正, 列挙されたパーツの数)
|
HU3DM_getMinCoveringBallRadiusOfIndepModel |
ワールドから独立しているモデルにおいて、指定された点を中心としてモデル全体を覆う最小の球の半径を求める。 [書式] val =
HU3DM_getMinCoveringBallRadiusOfIndepModel(MSTRUCT_INT,MSTRUCT_DBL,
x,y,z) [戻り値] (-1.0,other) = (引数不正,半径) [備考] 構造体のチェックはしていない。不正な構造体を渡すと致命傷になる。
|
HU3DM_getMinCoveringBallRadiusOfModelInWorld |
ワールドに属する指定されたモデルにおいて、指定された点を中心としてモデル全体を覆う最小の球の半径を求める。 [書式] val =
HU3DM_getMinCoveringBallRadiusOfModelInWorld(mid,
x,y,z) [戻り値] (-1.0,other) = (引数不正,半径)
|
HU3DM_setModelPos | モデル原点のワールド座標の設定 [書式] HU3DM_setModelPos mid, x,y,z, opt1,opt2 mid : モデルID 実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setModelPosture_1 | モデルの姿勢の決定。 ロール・ピッチ・ヨーで表現。この順に回す。 [書式] HU3DM_setModelPosture_1 mid, r,p,y, opt1,opt2 mid : モデルID 実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setModelPosture_2 | モデルの姿勢の決定。 「上」を表すベクトル(upベクトル)と注視点によって姿勢を決定。 [書式] HU3DM_setModelPosture_2 mid, a,b,c, x,y,z, opt mid : モデルID [実行後のstatの値] (0,1,2) = (成功,引数不正,数学的エラー) [備考] 眼点→注視点ベクトルがupベクトルと平行な場合は処理できない。
|
HU3DM_setModelPosture_3 | モデルの姿勢の決定。 基準系を常に「回転前のモデル座標系」としてモデルを回転させる。 仕組みはHU3DM_setCamPosture_3と同様。 [書式] HU3DM_setModelPosture_3 mid, θ,φ,ψ, opt1,opt2 mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_setModelPosture_4 | モデルの姿勢の決定。 vi_m, vj_m, vk_mを直接指定する。 甚だしく間違った値を設定すると以後の各種計算で異常が発生する。 [書式] HU3DM_setModelPosture_3 mid, xi,yi,zi, xj,yj,zj, xk,yk,zk, opt opt : パーツの幾何パラメータ計算スイッチ。(0,other) = (計算しない,する)。詳しくは「< モデルの幾何操作 >」を参照。 [実行後のstatの値] (0,1,2) = (成功,引数不正,数学的エラー)
|
HU3DM_rotateModel | モデル座標軸まわりの回転 [書式] HU3DM_rotateModel mid, opt, θ, opt2 mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_conbineModels | ワールド構造体に属する複数モデルのコピーを合体して新たにモデルを作成する。 基本姿勢の新たな空モデルMnewを作成し、合体させるモデルのパーツのMnewに対する相対的位置関係を求め、Mnew座標系にコピーする。 [書式] HU3DM_conbineModels n,midList, midDst n : 合体させるモデルの個数 [実行後のstatの値] (0,1,2) = (成功,引数不正,中止)
|
HU3DM_rotateModelFleshOnly | ワールド構造体に属する指定されたモデルの身のみを回転させる。 モデル座標系はそのままに、構成するパーツ群のみをモデル座標系から一旦切り離して回転させ、その後再びセットする。 [書式] HU3DM_rotateModelFleshOnly mid, θ,φ,ψ, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正) [解説]
ターゲットのモデル座標軸のオリジナルをxm,ym,zmとする。それらのコピーxm2,ym2,zm2を作成する。
|
HU3DM_photoOneModelInWorldStruct | ワールド構造体に属するモデルを1つ撮影する。 [書式] HU3DM_photoOneModelInWorldStruct midplus, n midplus : モデルID+1 [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_photo | ワールド構造体に属する全ての可視モデルを撮影する。 [書式] HU3DM_photo n n : 描画されたパーツ数を受け取る変数
|
HU3DM_superPhoto | ワールド構造体に属するすべての可視パーツを全てまとめて強制的にzソートして撮影する。 [書式] HU3DM_superPhoto n n : 描画されたパーツ数を受け取る変数
|
HU3DM_makeRegularPolygonFrame | 正多角形フレームデータの作成 [書式] HU3DM_makeRegularPolygonFrame r, ndiv, θ,φ,ψ, ARRAY r : 外接円半径 [実行後のstatの値] (0,1) = (成功,引数不正) [解説] この処理で作成される一時モデルをMとする。
|
HU3DM_makeCuboidFrame | 直方体フレームデータの作成 [書式] HU3DM_makeCuboidFrame lx,ly,lz, θ,φ,ψ, ARRAY lx,ly,lz : x,y,z方向の長さ [実行後のstatの値] (0,1) = (成功,引数不正) [解説] 内部動作をわかりやすく表現すると次のようになる。
|
HU3DM_makeSphereFrame | 球体フレームデータの作成 [書式] HU3DM_makeSphereFrame r, mdiv,ldiv, θ,φ,ψ, ARRAY r : 半径 [実行後のstatの値] (0,1) = (成功,引数不正) [解説]
ARRAYの要素(i,j,3*k),(i,j,3*k+1),(i,j,3*k+2)には第(i,j)パーツの第k番頂点のM座標系座標が格納される。
|
HU3DM_makeRegularPyramidFrame | 正多角錐フレームデータの作成 [書式] HU3DM_makeRegularPyramidFrame r,ndiv, h, θ,φ,ψ, ARRAY r : 底面の外接円半径 [実行後のstatの値] (0,1) = (成功,引数不正) [解説]
ARRAYの要素(i,3*k),(i,3*k+1),(i,3*k+2)には第iパーツの第k番頂点のM座標系座標が格納される。
|
HU3DM_makeRegularPrismFrame | 正多角柱フレームデータの作成 [書式] HU3DM_makeRegularPrismFrame r,ndiv, h, θ,φ,ψ, ARRAY r : 底面の外接円半径 [実行後のstatの値] (0,1) = (成功,引数不正) [解説]
ARRAYの要素(i,3*k),(i,3*k+1),(i,3*k+2)には第iパーツの第k番頂点のM座標系座標が格納される。
|
HU3DM_makeTorusFrame | 円環体フレームデータの作成 [書式] HU3DM_makeTorusFrame r,d, rdiv,ddiv, θ,φ,ψ, ARRAY r : 大円半径 [実行後のstatの値] (0,1) = (成功,引数不正) [解説]
ARRAYの要素(i,j,3*k),(i,j,3*k+1),(i,j,3*k+2)には第(i,j)パーツの第k番頂点のM座標系座標が格納される。
|
HU3DM_changeModelOrigin | モデル原点の変更。 モデル座標系はそのままに、モデルボディをモデル座標系に対して平行移動する。 [書式] HU3DM_changeModelOrigin mid, x,y,z, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_scaleModel | モデルの拡縮 [書式] HU3DM_scaleModel mid, a,b,c, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正) [備考] 倍率を負にすれば鏡像や反転像を作れる
|
HU3DM_rotateModelAroundMAxis | モデルボディのみの回転。 モデル座標系はそのままに、モデルボディをモデル座標系に対して回転させる。 回転はロール・ピッチ・ヨーで表現する。この順に回転させる。 [書式] HU3DM_rotateModelAroundMAxis mid, r,p,y, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正)
|
HU3DM_rotateModelAroundMAxis2 | モデルボディのみの回転。 モデル座標系はそのままに、モデルボディをモデル座標系に対して回転させる。 「上」を表すベクトル(upベクトル)と注視点によって姿勢を決定する。 回転前のモデル座標軸をxm0,ym0,zm0とする。 [書式] HU3DM_rotateModelAroundMAxis2 mid, a,b,c, x,y,z, opt mid : モデルID [実行後のstatの値] (0,1,2) = (成功,数学的エラー,引数不正) [備考] モデル原点→注視点ベクトルがupベクトルと平行な場合は処理できない。
|
HU3DM_rotateModelAroundMAxis3 | モデルボディのみの回転。 モデル座標系はそのままに、モデルボディをモデル座標系に対して回転させる。 常に回転前のモデル座標系を基準系としてモデルボディを回転させる。 [書式] HU3DM_rotateModelAroundMAxis3 mid, θ,φ,ψ, opt mid : モデルID [実行後のstatの値] (0,1) = (成功,引数不正) [解説] モデル座標系の座標軸をxm,ym,zmで表すとする。
|
HU3DM_inspectModelStruct | モデル構造体の検査。 ユーザーにファイルからロードさせたモデル等の、信頼できないモデルのチェックに使うと良い。 [書式] HU3DM_inspectModelStruct MSTRUCT_INT, MSTRUCT_DBL, ECODE MSTRUCT_INT :
int体 [実行後のstatの値] (0,1) = (正常,異常) [備考] エラーが発見されると直ちに検査を中断して本命令の呼び出し元に返るので、複数のエラーを同時に検出することはできない。 [エラーコード] 以下の説明では要素(i) (i=0,1,2,3) の値を ei と表し、エラーコードを e0.e1.e2.e3 と表現することにする。 e0 はエラーのある構造体の種類を記録する。(0,1,2,3) = (エラー無し,
int体異常, double体異常, 両方異常) < -1≦e1≦4 の場合 > -1 : 配列のサイズが異常 < e1=5 の場合 > エラーチェックに最初に引っかかったパーツのIDが e2 に格納され、e3 にその理由が次に示す値で格納される。 0 : パーツの有無の情報が不正。(0,1どちらでもない)
|
HU3DM_loadModelFromFile | モデルファイルのロード。 モデル構造体のint,double体の配列データをファイルからロードし、そのモデルが依存するテクスチャ画像ファイルの情報も取得する。 [書式] HU3DM_loadModelFromFile Path, MSTRUCT_INT,MSTRUCT_DBL, TexInfo, ECODE Path :
モデルファイルのパス (※カレントディレクトリからの相対パスでよい) < TexInfoの構造 > 文字列型(n+1,6)配列。ただし n はそのモデルが依存するテクスチャ画像ファイルの個数。 0 : 画像ファイルのパス (※ モデルファイルのあるディレクトリを基準とした相対パス) [実行後のstatの値] (0,1) = (成功,データが不正) stat = 2 の場合は ECODE にエラーの詳細が記録される。
|
HU3DM_saveModelIntoFile | モデルファイルの出力 [書式] HU3DM_saveModelIntoFile Path, MSTRUCT_INT,MSTRUCT_DBL, TexInfo Path :
モデルファイルのパス (※カレントディレクトリからの相対パスでよい) [実行後のstatの値] (0,1) = (成功,データが不正) [備考] ほとんどエラーチェックをしていない。不正なパラメータは致命傷になる。 |
HU3DM_cnvWpos2Mpos | ワールド座標(xw,yw,zw)からモデル座標系座標(xm,ym,zm)への変換 [書式]
HU3DM_cnvWpos2Mpos x,y,z, mid, relpos [実行後のstatの値] (0,1) = (成功,引数不正)
|
< 第二水準 >
index
|
ルーチン名 | 説明 |
HU3DM_common_data_array_scaling2 | 2次元配列の拡縮 [書式]
HU3DM_common_data_array_scaling2
TGTARRY, l,m [備考] エラーチェックを省いている
|
HU3DM_common_data_array_scaling3 | 3次元配列の拡縮 [書式] HU3DM_common_data_array_scaling3 TGTARRY, l,m,n TGTARRY : ターゲット配列 [備考] エラーチェックを省いている
|
HU3DM_common_data_array_QuickSort | 1次元配列のクイックソート 区間を指定できる。 他の1次元配列を巻き添えにしてソートする。 [書式] HU3DM_common_data_array_QuickSort TGTARRY,ATTENDANT , opt, s,e TGTARRY : ターゲット配列 [備考] エラーチェックを省いている。引数の不正は致命傷になる。
|
HU3DM_calcPartGeoParamInModelInWorldStruct | ワールド構造体に属するモデルの1パーツの幾何パラメータを設定する。 既に決定されているモデルの姿勢情報に従う。 [書式] HU3DM_calcPartGeoParamInModelInWorldStruct mid,pid mid : モデルID [備考] エラーチェックを省いている。引数の不正は致命傷になる。
|
HU3DM_calcModelGeoParamInWorldStruct | ワールド構造体に属するあるモデルの全てのパーツ幾何パラメータを設定する。 既に決定されているモデルの姿勢情報に従う。 [書式] HU3DM_calcModelGeoParamInWorldStruct mid mid : モデルID [備考] エラーチェックを省いている。引数の不正は致命傷になる。
|
HU3DM_zSortVisibleModelsInWorldStruct | ワールド構造体に属する全ての可視モデルをz優先度を考慮してzソートする。 結果はモデルIDの配列で与えられる。IDは先頭から順に並んでおり、前方のものから順に描画すればよい。 [書式] HU3DM_zSortVisibleModelsInWorldStruct midList midList : 結果を格納する配列 [実行後のstatの値] 描画すべきモデルの個数 [備考] エラーチェックを省いている。引数の不正は致命傷になる。 |
HU3DM_zSortPartsInModelInWorldStruct | ワールド構造体に属する指定されたモデルのパーツをzソートする。 結果はパーツIDの配列で与えられる。IDは先頭から順に並んでおり、前方のものから順に描画すればよい。 [書式] HU3DM_zSortPartsInModelInWorldStruct mid, pidList mid : モデルID [実行後のstatの値] 描画すべきパーツの個数 [備考] エラーチェックを省いている。引数の不正は致命傷になる。
|
HU3DM_zSortAllVisiblePartsInWorldStruct | ワールド構造体に属する全ての可視パーツをzソートする。 結果はモデルIDとパーツIDを組み合わせたIDの配列で与えられる。 IDは先頭から順に2要素ずつの区切りで並んでおり、前方のものから順に描画すればよい。 要素(i) (i=0,1,2,...)はi番目に描画すべきパーツの情報を保持する。 上位2バイトがモデルID、下位2バイトがパーツIDである。 [書式] HU3DM_zSortAllVisiblePartsInWorldStruct mpidList 実行後のstatの値] 描画すべきパーツの個数 [備考] エラーチェックを省いている。引数の不正は致命傷になる。
|
HU3DM_getPointImage | ワールド内の指定された点がカメラの有効投影面に像を作るかどうか、また、作るならその情報を求める。 結果は配列で与えられる。 要素(i)について、各iとそれに対応する情報は次の通り。 0 : 映るかどうか。(0.0,1.0)= 映(らない,る) [書式] HU3DM_getPointImage x,y,z, RSLT x,y,z : 点のワールド座標
|
HU3DM_photoOnePartInModelInWorldStruct | ワールド構造体に属するモデルのパーツを描画する。 [書式] HU3DM_photoOnePartInModelInWorldStruct midplus,pidplus, opt midplus : モデルID+1 [実行後のstatの値] (0,1) = (映ならかった,映った) [備考] エラーチェックを省いている。引数の不正は致命傷になる。
|
HU3DM_common_geo_rollPitchYaw | 与えられた直行座標系単位ベクトルを回転させる。 ロール・ピッチ・ヨーで表現。この順に回転。 [書式] HU3DM_common_geo_rollPitchYaw vi,vj,vk, r,p,y vi,vj,vk :
x,y,z単位ベクトル。それぞれ、(0),(1),(2)に上位座標系成分をx,y,z入れておく。
|
HU3DM_common_geo_orthonormalize3vectors | 与えられた3つのベクトルを正規直交化する。 [書式] HU3DM_common_geo_orthonormalize3vectors v v : ベクトルの成分を保存する1次元9要素double型配列。 [実行後のstatの値] (0,1) = (成功,数学的エラー) [備考] 3つのベクトルが一次独立でない場合、数学的エラーになる。
|
HU3DM_common_geo_Slv3x3SLE | 解が1つに定まるような3元連立一次方程式 Ax=b を解く [書式] HU3DM_common_geo_Slv3x3SLE A,b,x A : 係数行列。A = a11,a12,a13,a21,a22, ..., a33 [実行後のstatの値] (0,1) = (成功, det(A)=0により計算不可) [備考] 解はdouble型で返る
|
本モジュールを使うプログラムの一般的な構成はおよそ次のようになる。ユーザーの都合で適宜工夫,変更するのがよい。
*はラベルを表す。
*Boot プログラム冒頭で初期設定を行う。この例ではここで多くのパラメータを決めてしまっているが、ダイナミックに変更することも可能。
ユーザーインターフェース。メニュー画面等。 *MakeModelsモデルの作成。 まずモデル構造体を作る。そして作ったモデルを「HU3DM_importModelToWorldStruct」でワールドにインポートする。 モデル構造体を用意するには3つの方法がある。 @ パーツを一つ一つ手打ちする。 他にもモデルの変形等、様々な命令が用意されている。 *Show描画を行う。アニメーションならループを使えばよい。 カメラの操作のために次の命令が用意されている。 モデルの操作のために次の主要な命令が用意されている。 撮影のために次の主要な命令が用意されている。 ユーザーの工夫次第で様々なことができる。また、本モジュールの内部変数にアクセスすれば高度な操作も可能。 *PDCB1ポリゴン描画直前コールバック。 *PDCB2ポリゴン描画直後コールバック。 |