HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0713
EF56多面体にそれぞれ異なるテクスチャを貼りたいのですが・・・4解決


EF56

リンク

2009/7/13(Mon) 04:47:07|NO.26344

始めまして。最近始めたばかりの者ですが、壁にぶつかってしまいました。

hgimg3を利用しているのですが、入力された文字数に応じた3Dの多面体それぞれの面に、
その入力された文字ひとつひとつをテクスチャとして貼り付けたいのですが、
どうもうまいやり方が解りません。
例えば4文字なら正四面体に、5文字なら空白文字を1つ足して立方体に、と言う具合です。

そもそも3Dを扱うのが初めてなので、根本的なあたりで躓いてしまっているのかもしれませんが、
是非ご教示いただけたらと思います。



この記事に返信する


リンク

2009/7/14(Tue) 22:56:38|NO.26377

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が初めてだと難しいかなぁ……。



EF56

リンク

2009/7/15(Wed) 02:54:00|NO.26388

こんばんは。レス、どうもありがとうございます。


>hgimg3には自分で好きなところにポリゴンを作るような命令は無かったはずなので、

なるほど。まずこれをはっきりと知りたかったんです。ヘルプ等を穴の開くくらい読んでも、
こう言った記述が読み取れなかったので、いくつか他の方法に移行するのを決めかねて
いたんですよ。


>最初にモデリングソフトで、想定される面数のモデルを全部作ります。

一般的なやり方なのかよくわからなかったのですが、ちょうど今、このやり方を試していた所です。
使うものが正四面体、立方体、正八面体のみですので、手間もそうかからずけっこうよさそうですね。


>プログラムの中でxファイルを作ります

これです!これが出来たら即解決なのに、と思っていたのですが、なんと出来るんですね!
すごいです。わざわざサンプルまでいただいて、とても感激です。
3Dは初心者ですが、サンプルさえ読ませていただけたら、自分のやろうとしている範囲なら
理解できると思います(と言うか、します)。
早速、試させてもらいましたが、「役に立つかわかりません」どころではありませんね。
まさにこれです。こちらのサンプルを参考にアレンジを加えてみようと思います。

これで、現在の状況が飛躍的に前進しました。
本当にどうもありがとうございました。



いなえ

リンク

2009/7/15(Wed) 10:15:50|NO.26395

解決しているようですが補足。

>hgimg3はモデルを削除する命令も無かったはずなので、

Version 3.2 からはモデルを削除するdelmodel命令が実装されています。
ただ状況を見る限り、わざわざ削除するまでもなさそうですが。



EF56

リンク

2009/7/16(Thu) 00:42:23|NO.26447

補足ありがとうございます。

delmodelについては、一応認識だけはしていましたが、
そうですね、そんなにたくさん作りこまなければならないような事態にはならないので、
いなえさんのおっしゃるように、削除する事もなさそうです。

どうも、ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.