サンプル [hgimg4/tamane_face.hsp] を書き換えて、実験してみたスクリプトです。
[repeat]ボタンを押すと、ランダムの順番で、3Dモデルたちを読込みます。
かつ、3Dモデルのどれかをランダムで、書き換え対象とします。(=ID)
[FACE1,2,3]ボタンで、書き換え実行です。
書き換え対象の『ID』と実際に書き換えられた3Dモデルが、合っていたり、いなかったり。
はて?
#include "hgimg4.as"
chdir dir_exe+"\\sample\\hgimg4"
randomize
*go_repeat
gpreset
screen 0,700,480,, 100,100
setcls CLSMODE_SOLID, $808080
setcolor GPOBJ_LIGHT, 1,1,1 ; ライトカラーを設定
setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; アンビエントカラーを設定
; ボタンを設置
objsize 100,30
button goto "repeat",*go_repeat
// objsize 200,60
button gosub "FACE1",*face1
button gosub "FACE2",*face2
button gosub "FACE3",*face3
junban=rnd(4)
if junban=0 : gosub *duck_L : gosub *duck_R : gosub *tamane2 : gosub *tamane2_R : gosub *tamane2_L
if junban=1 : gosub *duck_R : gosub *tamane2_L : gosub *tamane2 : gosub *duck_L : gosub *tamane2_R
if junban=2 : gosub *tamane2_L : gosub *duck_L : gosub *duck_R : gosub *tamane2_R : gosub *tamane2
if junban=3 : gosub *tamane2_R : gosub *duck_R : gosub *duck_L : gosub *tamane2_L : gosub *tamane2
goto *CAMERA
*duck_L
gpload id_duck_L,"res/duck" ; モデル読み込み
setscale id_duck_L, 3,3,3
addpos id_duck_L, -5,0,0
return
*duck_R
gpload id_duck_R,"res/duck" ; モデル読み込み
setscale id_duck_R, 3,3,3
addpos id_duck_R, 5,0,0
return
*tamane2
gpload id_tamane2,"res/tamane2" ; モデル読み込み
setscale id_tamane2, 0.1,0.1,0.1
addpos id_tamane2, 0,0,0
return
*tamane2_L
gpload id_tamane2_L,"res/tamane2" ; モデル読み込み
setscale id_tamane2_L, 0.1,0.1,0.1
addpos id_tamane2_L, -10,0,0
return
*tamane2_R
gpload id_tamane2_R,"res/tamane2" ; モデル読み込み
setscale id_tamane2_R, 0.1,0.1,0.1
addpos id_tamane2_R, 10,0,0
return
*CAMERA
setpos GPOBJ_CAMERA, 0,20,40 ; カメラ位置を設定
// gpact id_tamane2
nodename = "atama" ; テクスチャを入れ替えるノード名
; 特定のノードに割り当てられたマテリアルを取り出す
id=rnd(6)
gpnodeinfo id_proxymat,id, GPNODEINFO_MATERIAL, "atama"
repeat
title "id_duck_L= "+id_duck_L+" id_duck_R= "+id_duck_R+" id_tamane2_L= "+id_tamane2_L+" id_tamane2= "+id_tamane2+" d_tamane2_R= "+id_tamane2_R
stick key,15
if key&128 : end
redraw 0 ; 描画開始
gplookat GPOBJ_CAMERA, 0,11,0 ; カメラから指定した座標を見る
gpdraw ; シーンの描画
font "",20,1 : color 0,255,0
pos 110,70 : mes "id_tamane2_L= "+id_tamane2_L, mesopt_outline
pos 270,40 : mes "id_tamane2= "+id_tamane2, mesopt_outline
pos 430,70 : mes "id_tamane2_R= "+id_tamane2_R, mesopt_outline
pos 210,380 : mes "id_duck_L= "+id_duck_L, mesopt_outline
pos 370,380 : mes "id_duck_R= "+id_duck_R, mesopt_outline
pos 30,410 : color 255,255,255
mes "ID = "+id
mes "gpnodeinfo id_proxymat, ID, GPNODEINFO_MATERIAL, ''atama''"
redraw 1 ; 描画終了
await 1000/60 ; 待ち時間
loop
*face1
gpmatprmt id_proxymat, , "res/head_SD.png"
return
*face2
gpmatprmt id_proxymat, , "res/head_SD1.png"
return
*face3
gpmatprmt id_proxymat, , "res/head_SD2.png"
return