HSP3.6に添付されているHGIMG4の GPB converter ver.0.6 から出力された3Dのジオメトリが記述された.xmlを、
XMLパーサーを使ってHSP3上で読み込みたいと思いました。
(HGIMG4のGPBの.xmlはHGIMG4ツールの「構造をXMLに出力」をチェックしてFBXを変換すると出力できます)
XMLパーサーをHSP3から使用する方法については、HSP3の同梱モジュールの mod_rss.as がサンプルになると思うのですが、
これは名前の通り、rss用のモジュールで、多目的には設計されていないようなのです。
mod_rss.as
#ifndef __mod_rss__ #define __mod_rss__ #module "rssmod" #deffunc rssload array _v1, array _v2, str _p1, int _p2 ; ; XMLパーサー(MSXML)を使用してRSSを読み込む ; rssload 変数1,変数2,パス,個数 ; ; 変数1,2 = 文字列型配列変数として結果が代入されます ; (変数1はRSSの内容、変数2はリンク先) ; パス = URLまたはファイルパスを指定します ; 個数 = 読み込むRSSフィールドの数を指定します ; (0または省略時は5個になります) ; newcom oDom,"Microsoft.XMLDOM" oDom("async")="FALSE" ; 同期読み込みを行う oDom->"load" _p1 oRoot = oDom("documentElement") if varuse(oRoot)=0 : return 1 rsstag = getpath(""+oRoot("tagName"),16) if rsstag="rdf:rdf" : goto *rsspick if rsstag="rss" : goto *rsspick delcom oRoot delcom oDom return *rsspick maxnum=_p2 if maxnum<=0 : maxnum=5 comres elm_ch oDom->"getElementsByTagName" "title" comres elm_link oDom->"getElementsByTagName" "link" max=elm_ch("length") if max>maxnum : max=maxnum sdim _v1, 64, max sdim _v2, 64, max repeat max i=cnt node = elm_ch("item",i) node2 = node("firstChild") _v1.i = node2("nodeValue") node = elm_link("item",i) node2 = node("firstChild") _v2.i = node2("nodeValue") loop delcom node delcom node2 delcom elm_ch delcom elm_link delcom oRoot delcom oDom return 0 #global #endif
これをGPB converter ver.0.6から出力される.xmlを読み込むためのパーサーにスクリプトを改造できないでしょうか?
例えば、頂点についてのタグは、<vertices></vertices>であるようです。
形式としては
<vertices count=頂点数> // position vec3(x,y,z) // normal vec3(x,y,z) // texCoord vec2(s,t) // blendWeights vec4(x,y,z,w) // blendIndices vec4(x,y,z,w) </vertices>
という順序で羅列されているように読めます。
//という部分はおそらくコメント行で、区切り記号は半角スペースなのか、改行なのかはよく分かりませんでした。
これを例えば、要素ごとに整数変数や実数型配列変数へ出力できないでしょうか?
頂点数ならcount、positionならposition、nomalならnormal用の配列変数へ、という具合にです。
アドバイスお願い致します。