初心者質問板

Last-modified: 2009-12-10 (木) 20:48:18

Easy3Dの初心者向けの掲示板です。


パーツ単位の回転・移動

LV1? (2008-06-16 (月) 20:07:55)

質問なんですが、E3Dの関数にて「E3DSetScale」のようなパーツ単位の操作で、パーツの回転・移動はできないものでしょうか?
というのは、今自分がやろうとしてることが…
「メタセコで車のモデルを作り、車モデルは外装(ボディ・タイヤ・各ドア・ボンネットなど)と内装(シート・計器類・ステアリング・シフトレバーなど)をパーツごとに分けて作成。1つの「車モデル」としてHSPで読み込み、ドアの開閉・ステアリングの回転などの動きをつける」ということなのですが、ボーンを組み込んで影響範囲を設定しても、余計なものまで一緒に動いてしまいうまくいきません。車モデル全体に当たり判定などをつけたいが為に、このような方法をとってしまったのですが、やはり別々で作るべきでしょうか?助言をお願いします。


  • 影響度が正確に設定されていればその方法でドアの開閉などを表現できますよ。パーツごとに回転させるには今のところ空モーションを作ってボーンを変形させねばなりません。 -- nana? 2008-06-17 (火) 15:30:55
  • 回答ありがとうございます (^^) やはり影響範囲の設定がうまくいってないんですね・・・ -- LV1? 2008-06-17 (火) 18:22:50
  • (改行してしまった)もう少しRokDeBoneのほうを使いこなせるようにがんばります。 -- LV1? 2008-06-17 (火) 18:25:48
  • パーツの組み換えを楽しむようなゲームが作りたいのでしょうか。それなら、別々に作ってよいのではないでしょうか。当たり判定については、車全体と同じ大きさのダミーオブジェクトを車の座標に置く、車のパーツのオブジェクトごとに当たり判定をして、どれかに当たっていれば他の部分の当たり判定をスキップして当たったことにする、などすればよいと思います -- rain? 2008-06-19 (木) 18:42:32
  • rainさんコメントありがとうございます。最初はrainさんのような方法をとってみたのですが、車種の違う車を何台か追加しはじめると、モデルデータ管理とかめんどくさくなってしまって (^^; 、車を1つのsigモデルとして読み込ませるとプログラムもすっきりするし、モデルの修正追加が簡単と思いまして…。途中で挫折したらrainさんのコメントのような方法でやってみようかと思います。ありがとうございます (^^) -- LV1? 2008-06-20 (金) 13:11:14
  • あっ、一応車は走るようになってます。ドライブシミュレータ?かな? -- LV1? 2008-06-20 (金) 13:45:15

装備変更の手順

初心者? (2008-05-27 (火) 23:07:43)

初心者です。
上着、ズボン、篭手、靴を各10種類くらいの装備を用意して武器も20種類ほど用意しました。現在は何も着せていない状態のキャラクターに数種類のモーションを与えて動かしています。

装備によって描写を変えたいと思ったのですが実装手順がいまいちわかりません。
調べたところディスプレイスイッチという機能があったのですが15種類しか使えないようです。
装備を変えるとモーションを全部作り直すものなのかどうかというのも良く分かっていません。
初心者なもので当たり前の質問をしていたらすいません。宜しくお願いいたします。


  • 二通りの手順が考えられます。一つ目はキャラクターに装備品モデルのデータを持たせて表示、非表示を切り替えます。ディスプレイスイッチではなくE3DSetValidFlagを使えばおkです。二つ目は、キャラクターのボーン情報から、装備品の位置などを設定する方法です。武器などは比較的簡単に実装できるはずですが肌にくっ付く服などは2番目の方法では難しいかもしれません。サンプルリンクの「武器を持たせる」というリンクも参照してください。 -- ナナ? 2008-05-28 (水) 10:21:49
  • 迅速、丁寧な回答に、心より感謝致します。精進したいと思います。 -- 初心者? 2008-05-28 (水) 11:10:26

ジョイントの角度

sin? (2008-05-25 (日) 10:37:26)

ジョイントの角度を得る命令はあるのでしょうか?
例えば今、肘の角度は何度に曲がっているか?を得る命令みたいなものです。
E3DGetBonePosで位置を得る事はできそうなのですが、それを工夫するしかないのでしょうか?


  • E3DGetBoneQでジョイントの向いてる姿勢(方向)をクォータニオンで求めることができます。あとはクォータニオンをE3DGetQAxisAndDeg で角度やベクトルに変換できます。確かにE3DGetBonePosだけでジョイントのベクトルを求めることもできますね。 -- Bの人? 2008-05-27 (火) 20:55:13

特定ライトを当てない

ライト? (2008-05-18 (日) 11:28:51)

E3DSetRenderStateでD3DRS_LIGHTINGをfalseにするとライトの効果をOFFにできることは確認できたのですが、すべてのライトの効果が消えてしまいます。
特定のライトを当てないといった事は可能でしょうか?


  • ライトの色を0,0,0にして黒にしたらどう? -- 2008-05-18 (日) 18:37:11
  • 黒くともライト、故にそれが平行光源なら、オブジェクトは真っ黒に塗りつぶされることでしょう。スポットライトは今使えないので省くとして、そのオブジェクトが描写されるときだけ(オブジェクトのE3Dchkinciew前?)、任意のライトを無効にすれば出来ると思います。ライトを破棄したあと作り直すとか、ポイントライトにして範囲を小さくしてまた戻すとか、多分。試してませんが。 -- ナナ? 2008-05-18 (日) 20:53:41
  • 私にとって非常に有用なピンポイントのアイディアでした。ありがとうございました。 -- ライト? 2008-05-18 (日) 22:58:04

2D表現

質問初心者? (2008-05-03 (土) 20:46:20)

毎度お世話になっております。
3D空間の中にトランプを立てただけのような2Dのものを大量に置きたいと考えております。
ビルボードだと自分に向かって回転してしまいますし、スプライトはHPバーのように表現している空間ではなくスクリーンに直接描写するものだと認識しております。

ここでお聞きしたいのが「一番軽い方法」で実装する手段です。
私の少ない知識では点4つ面1のただの板のようなsigファイルに任意の画像をテクスチャとして貼り付け配置する、といったようなものになります。(裏は今回は考えない)

上記の方法でも良いのですが絶対的に軽いビルボードの存在を横目にsigを大量に配置しているさなか、「回転しないビルボードがあればもっと軽いのではないか」などと煩悩が働きここに相談しにきた次第です。

何卒、助言のほど宜しくお願いします。


  • こんばんは。おっしゃってる事は筋が通ってると思いますよ。ただ、カメラへの向きを持たないとすれば、-Z方向固定になるんじゃないでしょうか?全てのビルボードが特定の方向を向いているという事は出来るのかもしれませんが、、、 -- pupepo? 2008-05-04 (日) 03:24:10
  • こんにちは。昨日はちょっと否定的な書き込みをしてしまったんですが、よく考えるとおもしろそうですね。特定の方向を向くビルボードや、特定の対象に向かうビルボード。普通はカメラの方を向くんですけど、対象方向や位置を指定できるやつ。表向き。裏向き。左右反転裏向き。両面表示。そんな高機能ビルボードがあれば、軽い負荷で画面をニギヤカにするのにすっごく助かりますよね。おちゃっこさんにお願いしてみてはいかがでしょうか?今はお忙しいようですが、メモの中には入れて下さるかも? -- pupepo? 2008-05-04 (日) 16:50:17

質問だらけですいません

質問初心者? (2008-04-29 (火) 01:28:18)

ゲーム内で解像度を変えることは可能でしょうか?(インターフェイス的な意味ではなくシステム部分で躓いております)
screenとE3DInitをいろいろ弄ってみても初期化がうまくいきません。
ヒントなどいただければ幸いです。


  • システム部分でと言うのがよくわからないんですが、
    ①ウインドウサイズを変更する。
    ②フルスクリーン状態でウインドウサイズを変更する(結果として解像度変更?)。
    ③OSの解像度設定を変更する。
    の、どれにあたるんでしょうか?
    ①なら可能です。リアルタイムでも出来ます。
    *sc
    screen 0, screenw, screenh, 1,100,100
    return
    と言うサブルーチンを作って置き、メインループ内に
    if keybuf0.'X'    = 1 : screenw =screenw+ 10 : gosub *sc
    と言う行を加えれば、Xキーで横に伸びて行きますよ。例えばですが。
    ②の場合でも同じ事が出来ました。
    今ちょっと試しただけなので、トラブルの可能性についてはよくわかっていませんが、
    これはこれで画面を左右から押しつぶして行くような独特の効果が出ますね。
    ③の場合はchgdispと言う命令で出来ますよ。
    pupepo?-- 2008-04-29 (火) 10:52:11
  • 質問する立場ながら返答に困る書き方をしてしまいご迷惑をお掛けしました -- 質問初心者? 2008-04-29 (火) 22:59:15
  • 複数行を書き込むつもちでコピペしたら1行だけにOTZ 書き込み方法調べてから具体例を書かせていただきます -- 質問初心者? 2008-04-29 (火) 23:04:11
    駄文ながら具体例を挙げさせていただきます
    以下をE3DのサンプルのLoop部分に挿入するしたものと”test”を表示するだけのサンプルに挿入した場合
    testのサンプルでは全部機能するのですがE3Dで描写を行っている場合1~3は機能するのですが4~6の
    chgdispを使用するとエラーが発生します
    if keybuf.'1'== 1 : screen 0, 1024, 768, 1
    if keybuf.'2'== 1 : screen 0, 800, 600, 1
    if keybuf.'3'== 1 : screen 0, 640, 480, 1
    if keybuf.'4'== 1 : chgdisp 1,1024, 768
    if keybuf.'5'== 1 : chgdisp 1,800, 600
    if keybuf.'6'== 1 : chgdisp 1,640,480

もう一点は解決できたのですがE3DInitの前に
screen 0, 800, 600, 1
などでSC初期化を行っていると後からscreen命令で大きい画面から小さい画面おにした場合
画面の中に画面がある状態になっていました(E3Dサンプルの場合初期が640×480なのでここを変えてから↑のものをLoopにいれると確認できると思います)
最初のscreen命令をE3DInitの後に移せば解決できました
またpupepo様が記載してくださったサンプルのように「連続して少しづつ小さい画面にする」場合は上記の不具合はでませんでした

曖昧な質問に対して推測を含めながらの返答をいただき心から感謝いたします
宜しくお願いいたします

  • こんにちは。chgdispの後にE3DInitした場合には問題ないですね。まあ、これはごく普通のやり方ですし。これを逆にするとエラーメッセージ出ますね。chgdispはOSの機能に関わりますし、E3DInitはDXの機能に関わります。正直言って、少し珍しいチャレンジだと思いますので、こう言うやり方は想定されていないという事ではないでしょうか。E3DInit→chgdispと言うやり方が必要なら、E3DBye→chgdisp→E3DInit→再読み込みするのがいいかも知れませんね。それならEXEは終了しないですから。 -- pupepo? 2008-04-30 (水) 12:04:53
  • E3DBye→chgdisp→E3DInit→再読み込み の方法で対処しようと思います。ありがとうございました。 -- 質問初心者? 2008-04-30 (水) 16:07:20
  • ゲーム中で動的にフルスクリーン・ウィンドウと解像度を切り替えるのは難しいようですね -- ぶちさば? 2008-04-30 (水) 21:29:33

頂点番号取得について

質問初心者? (2008-04-18 (金) 17:47:52)

任意の2D座標から一番近い頂点番号を取得する方法は見つかったのですが、任意の3D座標から一番近い頂点番号を取得する方法はありますでしょうか?
目的が果たせるなら間接的なアプローチで構いません。ご教授のほど宜しくお願いします。


  • それはモデルから頂点位置を列挙して、任意座標からの直線距離を出し、ソートする事になるのではないでしょうか?いかにも手間がかかりそうですから、極端に多い場合には「どう見ても遠い頂点はあらかじめパーツ単位で除外する」とか、それなりのやり方が必要になるかも知れませんが。このあたりはやった方が早いかどうか有効性の問題になるでしょうね。ものすごい大量のレンガが崩れ落ちる物理演算などではそう言う処理を加えてやっているそうです。 -- pupepo? 2008-04-18 (金) 23:58:16
  • 助言を元に上記の方法で形にすることができました。ありがとうございます。 -- 質問初心者? 2008-04-19 (土) 21:22:16

hsidについて

もりした? (2008-03-21 (金) 19:38:36)

repeat loop 命令で300くらいのhsidを作ると動作が重くなります
動作を軽くする方法はあるんでしょうか


  • モデルを300くらいたくさん読み込むとき(hsidを作るとき)に、パソコンのメモリが足らなくてページファイルが作成されるため、動作が重くなる可能性があります。モデルのポリゴン数、ジョイント数、パーツ数を減らせばメモリの使用量は減ります。300ものhsidをつくるときはその効果がケンチョにでます。
    そうすれば、読み込んだ後(描画するときなど)のCPU使用率も減ります。
    (動作が重くなる場面によって対処法が変わってくると思ふ) -- もちピザ? 2008-03-22 (土) 10:28:54
  • repeat loop の間にawaitやwait命令を挟んだほうがいい。 -- もちピザ? 2008-03-25 (火) 08:13:32

moaファイルの中のsigファイル

万年初心者もりした? (2008-03-06 (木) 08:58:08)

現在自分でmoaファイルをE3Dプログラムで 読み込む事に挑戦しているのですが sigファイルを読み込んで モボタン を押しても 何かmoaファイルに
記録されてるみたいです なんの意味があるんですか どういう役割をはたしているのか 教えて欲しいです 


  • moaについて知りたいならここをみたらいいかも、http://www5d.biglobe.ne.jp/~ochikko/rdb2_MA.htm
    [sigファイルを読み込んで モボタン を押しても 何かmoaファイルに
    記録されてるみたいです]
    とありますがモボタンを押してもその時点でmoaファイルに記憶されることはありません -- 2008-03-06 (木) 13:28:18
  • E3DSetValidFlagの3番目のパラメーターの意味がわかりません -- もりした? 2009-07-02 (木) 18:00:18
    • 第3引数の値は、RDB階層構造エディタで△のオブジェクトを右クリック、SigParamsダイアログの「このオブジェクトを無効にする」のチェックマークと同じ意味です。
      flagが0のときチェックあり。
      flagが1のときチェックなし。
      と同じ意味です。…という回答でよかったのかな。
      というか、まったく違う内容の質問をしたいときは新スレを立てましょう。見逃されても仕方ないですよ。 -- GENKI? 2009-07-03 (金) 01:06:54

スプライトをボタンに

BOB? (2008-03-02 (日) 04:09:17)

マウス操作だけで全ての操作が出来たら…と思って、マウスの左クリックで反応するスプライトを作るにはどうしたらいいでしょうか?もしくはスプライトに変わる方法で、画面クリックでできるユーザーインターフェイスを作るのに何かいい方法はありますか?よろしくお願いします。


  • そう言う場合は、わりと普通に「クリックした時点でのカーソルの位置をチェックする」→「スプライトの位置と大きさをチェックする」→「スプライトに当たっていればボタンを押したものとする」でいいんじゃないでしょうか?具体的にはこんな感じで?http://pupepo.com/vamp_48.html -- pupepo? 2008-03-02 (日) 06:11:41
  • おぉ!pupepoさん、ご親切にありがとうございます!助かりました。 -- bob? 2008-03-02 (日) 20:13:10
  • なんとかお役に立てたようでよかったです。 -- pupepo? 2008-03-03 (月) 02:34:54

hsidとquaファイル

もりした? (2008-02-19 (火) 14:07:21)

sigファイルの元からquaファイルをつくらないとちゃんとした動作にならないのはわかるのですが たとえば おのをもったキャラが おのをふりまわすモーションと もってないキャラのモーション ではhsidも 違うものにしなければいけないのですか ひとつのhsidからは quaファイルを作るのはわかるのですが hsidの違うものからの モーションを作るのに うまくいきません どういう命令をくみあわせたら いいか 教えてください 


  • 方法はたくさんあります、sigファイルにパーツがあると思いますが、キャラと斧をパーツわけしておきディスプレイスイッチという機能をつかって、斧のパーツを非表示にする方法です。quaモーションを作るとき設定できますがe3dの関数で設定することもできますE3DSetDispSwitch
    モーションを使いまわしたいときはこういうソフトを使ってみては
    http://www.geocities.jp/kinounohito2005/index.html
    http://www.geocities.jp/oirahakobito2/conv.html
    別の方法はキャラと斧とわけて2つのsigをつくることです
    プログラムで、キャラに斧をもたすことができます。
    詳しくはサンプルにて
    http://mochipizza.seesaa.net/article/83850828.html -- 26? 2008-02-19 (火) 14:42:09