|
|
|
2026/3/17(Tue) 03:13:07|NO.104873
NO.104768で投稿したスクリプトに関連する話なのですが
#include "hgimg3.as"
chdir dir_exe+"/sample/hgimg3/"
hgsetreq SYSREQ_MAXTEX,2048
hgsetreq SYSREQ_MAXMODEL,2048
hgsetreq SYSREQ_MAXOBJ,2048
hgini
cammode CAM_MODE_NORMAL
setdir HGOBJ_LIGHT,255,255,255
selcpos
objset3 0.0, -150.0, 500.0
addxfile mdla, "tamane_s.x"
regobj my_chr,mdla
repeat 4
setxinfo my_chr, 0, $11ff0+cnt*4,0.0,0.0,0.0
loop
repeat 4
setxinfo my_chr, 0, $21ff0+cnt*4,0.0,0.0
loop
*main
hgdraw ; 描画処理
hgsync 17 ; 時間待ち
goto *main
上記スクリプトの repeat 4 の部分をrepeat 8にすると
表示されなくなってしまいます。
$12000以降 と $22000以降 に数値を設定するとダメっぽいのですが
なにか対策はありますでしょうか?
私の環境の問題もあるかもしれません。
windows11
Intel(R) Celeron(R) CPU G3900T @ 2.60GHz (2.59 GHz) RAM 4.00 GB
|
|
|
2026/3/17(Tue) 16:21:01|NO.104875
指定するMatIDとIndexがオーバーしているのかもしれません。
少し実験してみましたがsetxinfoのp3(設定モード)は組み合わせずに別々に指定すると表示できました。
#include "hgimg3.as"
chdir dir_exe+"/sample/hgimg3/"
hgsetreq SYSREQ_MAXTEX,2048
hgsetreq SYSREQ_MAXMODEL,2048
hgsetreq SYSREQ_MAXOBJ,2048
hgini
cammode CAM_MODE_NORMAL
setdir HGOBJ_LIGHT,255,255,255
selcpos
objset3 0.0, -150.0, 500.0
addxfile mdla, "tamane_s.x"
regobj my_chr,mdla
repeat 2000
setxinfo my_chr, 0, $1000+(cnt),0,0,0
;setxinfo my_chr, 0, $2000+(cnt),rnd(4)
setxinfo my_chr, 0, $10000+(cnt*4),0.0,0.0,0.0
setxinfo my_chr, 0, $20000+(cnt*4),0.0,0.0
loop
*main
hgdraw ; 描画処理
hgsync 17 ; 時間待ち
goto *main
Indexの最大数を取得する方法は分かりませんでした。
あと、$1ff0に何か別の意図、用途があるのでしたらすみません(;
|
|
|
2026/3/17(Tue) 20:48:40|NO.104878
naya様 テストして頂いてありがとうございます
>Indexの最大数を取得する方法は分かりませんでした。
>あと、$1ff0に何か別の意図、用途があるのでしたらすみません(;
$1ff0については特に意味はなく
$2000を超えるとUVと頂点が設定できないので
少ないrepeat数という意味で作りました
tamane_s.x はたぶんそれ以上の頂点があるはず
自分で作ったXファイルのメッシュも
$2000を超えるとUVと頂点が設定できません
naya様のスクリプトで repeat 2049 を超えた場合です。
|
|
|
2026/3/17(Tue) 21:07:28|NO.104879
HGIMG3のリフェレンスに、
>setxinfo命令は、ボーンを含むモデルが持つ個別の状態を変更するために使用することができます。
>アニメーションが設定されているノードは設定することができません。
>また、正しいノードIDを指定しないと表示が崩れることもあるので、
>十分に注意して使用してください。
とあるね。
tamane_s.xには、idlingみたいなアニメーションが設定されてるかも。
アニメーションのないmodelでやると、できるかも。
|
|
|
2026/3/17(Tue) 22:33:53|NO.104880
setxinfoのヘルプより
$10000+Index 頂点座標( x,y,z )
$20000+Index UV座標( x,y )
色々実験中です。
ノードIDに対応した内部バッファのIndexのサイズが取得できれば問題は回避できそうです。
あと、モデルtamane_s.xも複数のノードに分かれているようですね。
もう少し調べてみます。
|
|
|
2026/3/18(Wed) 02:56:33|NO.104881
Index最大値を取得する試みです。
tamane_s.xではimax値が15180個($3B4C)辺りを上下しています。
モデルのアニメーションを止めていても、現状では実行ウィンドウが落ちる場合があり不安定です。
本ケースではノードは無関係でした(すみません)。
#include "hgimg3.as"
chdir dir_exe+"/sample/hgimg3/"
hgsetreq SYSREQ_MAXTEX,2048
hgsetreq SYSREQ_MAXMODEL,2048
hgsetreq SYSREQ_MAXOBJ,2048
hgini
cammode CAM_MODE_NORMAL
setdir HGOBJ_LIGHT,255,255,255
selcpos
objset3 0.0, -150.0, 500.0
addxfile mdla, "tamane_s.x"
regobj my_chr, mdla
;アニメーション停止
objact my_chr, -1, 0
sdim lst, 36*20000
;indexサイズの取得
imax=0
repeat
;await 5
getxinfo gets, my_chr, 0, $10000+cnt
if (strmid(gets, 0, 26)=="0.000000,0.000000,0.000000") : break
lst+=strmid(gets, 0, 26)+"\n"
;title ""+strlen(gets)+"_"+cnt+"_"+gets
loop
notesel lst
imax=notemax
title ""+imax
;notesave "xinfo.txt"
;stop
repeat (imax-5)/4
setxinfo my_chr, 0, $10000+(cnt*4), 0.0, 0.0, 0.0
loop
/*
;これで成功する事もありました
repeat 8
setxinfo my_chr, 0, $12000+(cnt*4), 0.0, 0.0, 0.0
loop
*/
*main
hgdraw ; 描画処理
hgsync 17 ; 時間待ち
goto *main
ただし、こちらの方法では速度的に実用に耐えないと思われます。
|
|
|
2026/3/19(Thu) 23:47:19|NO.104883
うし様 naya様 コメントありがとうございます。
今のところUV値 座標値 共に$2000を超えると不安定っぽいので
使わない方向で考えてみます。検証してくださってありがとうございました。
もうしばらく解決のチェックはしないでおきます。
|
|