hgimg3には自分で好きなところにポリゴンを作るような命令は無かったはずなので、
どんな多面体にも対応させるにはxファイルを自力で作るのがイイのかなーと思ました。
というわけで、方法その1。
最初にモデリングソフトで、想定される面数のモデルを全部作ります。
このとき全ての面のマテリアルは別々のものを使います。
あとは setxinfo を使って、各面にテクスチャを張り付けていけばできると思います。
texload "tex.bmp" : tex = stat ; テクスチャを登録して、テクスチャIDをtex変数に代入
setxinfo obj, 0, $2000 + 1, tex ; 1番のマテリアルのテクスチャを tex 変数のIDのテクスチャに変更
一応、どんな面数でも対応できるかもしれない方法その2。
プログラムの中でxファイルを作ります……(^^;
この場合、hgimg3はモデルを削除する命令も無かったはずなので、
作ろうとしている面数のモデルがすでにつくられてるかどうかを確認する必要がありますけどね。
役に立つかわかりませんが、せっかく作ったのでサンプルをひとつ。ちょっと長いですけど……。
;
; xファイルを自力で作って、hgimg3で作ったテクスチャをはりつけるサンプル
;
; 参考→ http://tkooler.moe.hm/hsp/bbslog/get/18446.html
;
#include "hgimg3.as"
buffer 1, 64, 64
screen 0, 640, 480
hgini
; xファイルをくりえいと
xfile = {"
xof 0303txt 0064 // ヘッダ(必ず必要)
// マテリアル0 緑 ( mat0 はマテリアルの名前)
Material mat0 {
0.000000;1.000000;0.000000;;
}
// マテリアル1 青
Material mat1 {
0.000000;0.000000;1.000000;;
}
// メッシュテンプレート
Mesh mesh {
8; // 8個の点を登録
-6.000000; 5.000000;0.00000;, // 点0 左の四角形 左上の点
-1.000000; 5.000000;0.00000;, // 点1 左の四角形 右上の点
-1.000000; 0.000000;0.00000;, // 点2 左の四角形 右下の点
-6.000000; 0.000000;0.00000;, // 点3 左の四角形 左下の点
1.000000; 5.000000;0.00000;, // 点4 右の四角形 左上の点
6.000000; 5.000000;0.00000;, // 点5 右の四角形 右上の点
6.000000; 0.000000;0.00000;, // 点6 右の四角形 右下の点
1.000000; 0.000000;0.00000;; // 点7 右の四角形 左下の点 (最後は;;)
4; // 4枚のポリゴンを登録
3;0,3,1;, // ポリゴン0 点番号 0, 3, 1の順に囲む、3点(三角形)のポリゴン (左の四角形)
3;1,3,2; // ポリゴン1 点番号 1, 3, 2の順に囲む、3点(三角形)のポリゴン (左の四角形)
3;4,7,5;, // ポリゴン2 点番号 4, 7, 5の順に囲む、3点(三角形)のポリゴン (右の四角形)
3;5,7,6;; // ポリゴン3 点番号 5, 7, 6の順に囲む、3点(三角形)のポリゴン (右の四角形) (最後は;;)
// マテリアルを割り当てるテンプレート
MeshMaterialList {
2; // 使用するマテリアルの数
4; // ポリゴン総数
0; // ポリゴン0 のマテリアル番号 (mat0)
0; // ポリゴン1 のマテリアル番号 (mat0)
1; // ポリゴン2 のマテリアル番号 (mat1)
1; // ポリゴン3 のマテリアル番号 (mat1)
{mat0} // 0番のマテリアルの名前
{mat1} // 1番のマテリアルの名前
}
// ポリゴンの頂点に法線を設定する
MeshNormals {
1; // 法線の数
0.000000; 0.000000; 1.000000;,// 法線0 [法線のX方向];[法線のY方向];[法線のY方向];,
4; // ポリゴンの数
3;0,0,0;, // [ポリゴン0番の頂点数];[頂点1の法線番号],[頂点2の法線番号],[頂点3法線番号];,
3;0,0,0;, // [ポリゴン1番の頂点数]...
3;0,0,0;, // [ポリゴン2番の頂点数]...
3;0,0,0;; // [ポリゴン3番の頂点数];[頂点1の法線番号],[頂点2の法線番号],[頂点3法線番号];; (最後は;;)
}
// 点にuv座標を設定する
MeshTextureCoords {
8; // 登録した点の数
0.000000;0.000000; // 点0 の...[U座標];[V座標];
1.000000;0.000000; // 点1 の...[U座標];[V座標];
1.000000;1.000000;
0.000000;1.000000;
0.000000;0.000000;
1.000000;0.000000;
1.000000;1.000000;
0.000000;1.000000;; // 点7 の...[U座標];[V座標];; (最後は;;)
}
}
"}
; xファイルをメモリに保存
memfile xfile
; メモリに保存したxファイルを読み込む(名前はてきとーでOKかと)
addxfile xmodel, "MEM:x.x"
regobj obj, xmodel
gsel 1
;「1」と書かれたテクスチャを作成
font msgothic, 64
mes "1"
settex 256, 256, 0, -1
tex1 = stat
cls 0
; 「2」と書かれたテクスチャを作成
font msgothic, 64
mes "2"
settex 256, 256, 0, -1
tex2 = stat
gsel 0
; マテリアルID 0 に tex1 のテクスチャを設定
setxinfo obj, 0, $2000, tex1
; マテリアルID 1 に tex2 のテクスチャを設定
setxinfo obj, 0, $2001, tex2
st = 0
*main
stick key, 15
hgdraw ; 描画
hgsync 32 ; 時間待ち
; カーソルキーで回転
if key&4 : addang obj, 0.0, 0.2
if key&1 : addang obj, 0.0, -0.2
if key&2 : addang obj, -0.2, 0.0
if key&8 : addang obj, 0.2, 0.0
; スペースキーで設定したテクスチャを交換
if key&16 {
if st {
setxinfo obj, 0, $2000, tex1
setxinfo obj, 0, $2001, tex2
st = 0
} else {
setxinfo obj, 0, $2000, tex2
setxinfo obj, 0, $2001, tex1
st = 1
}
}
goto *main
でもちょっと、3Dが初めてだと難しいかなぁ……。