gpnodeinfo

3Dモデルの階層情報を取得する

gpnodeinfo var,objid,option,"name"

var       : 結果が代入される変数名
objid(0)  : オブジェクトID
option(0) : 取得オプション値
name      : 階層ノード名

(プラグイン / モジュール : hgimg4)

解説

gpload命令で読み込まれた3Dモデルの階層情報を取得して、varで指定された変数に結果を代入します。
objidで指定した3Dモデルが持つ階層を名前によって指定することで個別のノードを特定します。
(階層の名前(ノード名)は、3Dモデル作成時にあらかじめ付けられています。すべての階層を取得する際には、mod_gputilモジュールのgptree_get命令をご使用ください。)
option値により、代入される結果を選択することができます。option値に指定できる値は、以下の通りです。

	オプション値          | 取得される内容
	--------------------------------------------------------------
	GPNODEINFO_NODE         該当するノードを示すオブジェクトID
	GPNODEINFO_MODEL        該当するモデルノードを示すオブジェクトID
	GPNODEINFO_MATNUM       ノードが保持しているマテリアルの数
	GPNODEINFO_MATERIAL     ノードのマテリアルID
	GPNODEINFO_NAME         該当するノード名(*)
	GPNODEINFO_CHILD        階層が持つ子のノード名(*)
	GPNODEINFO_SIBLING      同じ階層にある隣のノード名(*)
	GPNODEINFO_SKINROOT     スキンメッシュが持っているノード名(*)
	GPNODEINFO_MATNAME      ノードに設定されたマテリアル名(*)

    (*) 結果の文字列が代入されます

GPNODEINFO_NODEを指定した場合は、指定された名前を持つ階層を示す特別なオブジェクトIDの値が代入されます。
このオブジェクトIDを使用して、getposgetanggetquatなどそれぞれの階層が持つ座標や回転情報を取得することができます。(このオブジェクトIDは、gpnodeinfo命令で取得した直後しか使用できません。他の階層をgpnodeinfo命令で取得した場合は、以前に取得したオブジェクトIDは無効になります)
GPNODEINFO_MODELを指定した場合は、描画するモデルを持った階層のみオブジェクトIDが取得されます。
GPNODEINFO_CHILD、GPNODEINFO_SIBLING、GPNODEINFO_SKINROOTのオプションは、他の階層との繋がりを取得します。これにより、ノードの階層を調べることができます。
処理が正常に終了した場合は、システム変数statに0が代入されます。エラーが発生した場合は、システム変数statにマイナス値が代入されます。

GPNODEINFO_MATNUMを指定した場合は、ノードが保持しているマテリアルの数を取得します。メッシュモデルではないノードを指定した場合は、-1が返されます。
GPNODEINFO_MATNAMEを指定した場合は、ノードに設定されたマテリアル名を取得します。メッシュモデルではないノードやgploadで読み込まれていない3Dノードを指定した場合は、空の文字列("")が返されます。
1つのノードに複数のマテリアルが設定されている場合は、GPNODEINFO_MATNAME+1、GPNODEINFO_MATNAME+2というようにインデックスの値を加算してください。複数のマテリアルが設定されているかは、GPNODEINFO_MATNUMのオプションで調べることができます。

GPNODEINFO_MATERIALを指定した場合は、ノードに設定されたマテリアルを参照するためのマテリアルIDを生成します。メッシュモデルではないノードやgploadで読み込まれていない3Dノードを指定した場合は、-1が返されます。
取得されたマテリアルIDは、gpmatprm系,gpmatstate系の命令で独自に設定を追加変更することが可能です。
1つのノードに複数のマテリアルが設定されている場合は、GPNODEINFO_MATERIAL+1、GPNODEINFO_MATERIAL+2というようにインデックスの値を加算してください。複数のマテリアルが設定されているかは、GPNODEINFO_MATNUMのオプションで調べることができます。
GPNODEINFO_MATERIALによって取得されたマテリアルIDは、ノード内の情報を参照するために生成される特別なIDとなります。毎フレーム取得するような処理を行うと、フレームごとに新規のマテリアルIDが取得されてしまいますので、モデルが読み込まれた後に1回だけマテリアルIDを取得して使用するようにしてください。
取得されたマテリアルIDは、gpdelobj命令によって破棄された場合でも元のマテリアル情報は維持されますので、不要になったマテリアルIDは破棄することができます。

関連項目

gpload3Dモデルノードを生成(hgimg4)

サンプル逆引き (2)

tamane_face.hsp
tamane_tree.hsp

情報

プラグイン / モジュールhgimg4
バージョン3.7
作成日2025/07/08
著作者onitama
URLhttps://hsp.tv/make/hgimg4.html
備考hgimg4.asまたはhgimg4dx.asをインクルードすること。
タイプ拡張命令
グループ拡張画面制御命令
対応環境
  • Windows 版 HSP
移植のヒントWindows/Linux/android/iOS等HGIMG4をサポートするシステム上で動作します。
Windowsの場合は、OpenGL3.1以降/DirectX9が必要です。
hs ファイルhsphelp\hgimg4.hs