1人でゲームが作れるように修行します。2 (487レス)
上下前次1-新
110(1): 名前は開発中のものです。 [sage] 2010/10/06(水) 18:41:28 ID:WfQHbqcm(1) AAS
>>109109(1): SGGK ◆6pZCoAtaxk [sage] 2010/10/04(月) 23:34:31 ID:OotJcuep(1) AAS
DXライブラリのサンプルプログラムで拡張子mqoというのがあり、メタセコイアのファイルのことだとわかったので、
金曜日の夜にメタセコイアR2.4(フリーの方)をインストールした。
モデルをつくる技術が無いので、面→基本図形で面を生成し、材質設定で緑色を指定するにたどりつくまででもかなりの時間がかかった。
サンプルプログラムのやり方を真似してこの平面モデルのmqoファイルを読み込み、表示させようとしたが、
最初は全く表示されず、表示されても白黒だったりしたが、ファイル作るところからやり直してみたら今度は表示された。
結局原因は不明。次は今までの選手の2D画像を平面モデルに張り付けられるのかに挑戦。
頑張れ!
111: SGGK ◆6pZCoAtaxk [sage] 2010/10/07(木) 00:39:47 ID:uuBtJJiv(1) AAS
>>110
今は全ての作業が試行錯誤なので遅くなっているけど頑張ります!
選手の画像を1コマ切り取り、同じサイズの平面をメタセコイアで作成して
その平面に選手の画像を貼ろうとしたが失敗。
この処理はUVマップと呼ばれてるらしいが、とりあえず貼り付けをやめてxz面に垂直なただの平面を作り、
フィールドの次に描画させようとしたら表示されず。
何回かやり直していたら、フィールドと小さな平面が表示されたところで終了。(原因不明)
112: SGGK ◆6pZCoAtaxk [sage] 2010/10/07(木) 23:46:00 ID:IVAUpJqc(1) AAS
フィールドの平面モデルにネットのフリー素材のフィールド画像を張り付けてみようとしたら何故か出来た。
UVマッピングとかいまだに解ってないので偶然できただけ。
ビルボードで選手を描画するのは難しい事がわかってきた。
DrawBillboard3D関数が使えるかなと思ってリファレンスを見たら、画像のサイズは自分で入力しなければならないので、
この関数仕様だと、いろんな位置や角度で見たときの選手がどの程度の大きさで見えてるかを自分で計算出来る必要があり、これを実現するのは難しいと思った。
すぐ諦めるのはどうかと思いつつも、最初に諦めてたモデルを配置してカメラ関数で見てもらうやり方を検討することにして今日は終了。
とりあえずは、選手を円筒か何か簡単なモデルで表現して配置してどのように見えるかを目標にする。
113(1): 名前は開発中のものです。 [sage] 2010/10/08(金) 00:25:13 ID:lwTrudzA(1) AAS
>いろんな位置や角度で見たときの選手がどの程度の大きさで見えてるかを自分で計算出来る必要があり
DXライブラリ使った事ないので的外れかもしれないけど
こういうのって普通ビュー変換で処理されるんじゃないのか
114: SGGK ◆6pZCoAtaxk [sage] 2010/10/09(土) 01:18:45 ID:k0QY2+O0(1) AAS
>>113
実は自分は変換関係についてネットで調べて言葉を知ったところまでで、それ以上の探求をちょっと怠ってしまっている状況です…orz
でもそう言われて気になったのでビルボードの関数を試してみたら遠くのものが小さくでてました。やってみるきっかけになり、感謝します。
int DrawBillboard3D( VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int TransFlag ) ;
の引数、float Size : 描画する画像のサイズ…の意味を間違えて解釈していた。
縦横=Sizeの2D画像が3D空間のどこにあってもこのSizeを保って描画されるのかと思ってた。
もしそうならば、3D空間で遠くにある画像はその分小さく描画したいから自分でその大きさを計算していちいち引数Sizeの値を入力し直す必要があるのかと勘違いしてしまってた。
Sizeはあくまでもロードした画像の大きさであって、あとは座標を指定すればその位置に応じて大きさを変換してくれることが確認できた。
一応結果画像をうpしてみます。
外部リンク[html]:gamdev4.hp.infoseek.co.jp
115(2): SGGK ◆6pZCoAtaxk [sage] 2010/10/10(日) 00:13:14 ID:U9No5w8c(1) AAS
今日は進捗なし…orz
毎日何か進捗のある状態に持っていくことの難しさを痛感。
とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。
今まで書いてた2D平面版ではマウスカーソルの位置に選手が向かうようにしていたので同じ操作方法を使えるようにしたいのが理由。
2D版では、ゲーム画面(640X480)の左上角の座標がゲームのフィールド全体の座標でみたとき(WX、WY)という座標で、
マウスカーソルの画面での座標が(X、Y)としたとき、マウスカーソルのフィールド上での座標値は(WX+X、WY+Y)になる。
3Dでもこれに相当する処理をしたいけど、3Dになるとカメラの位置が立体的に変化するからどうすればよいか想像が付かない。
このスレで教わった用語からいもづる的に出てきた用語を駆使して、
「ビュー座標からワールド座標を算出」というそのままなキーワードで検索してみたらたくさん出てきた。
どうすれば出来るのかある程度調べたら、使えそうなライブラリ関数を探す予定。
ライブラリで出来なければ、何も出来ない自分なので…orz ←まぁ、これはあまり気にしないでこれからも行き詰まるまで頑張るつもり。
116(8): 名前は開発中のものです。 [sage] 2010/10/10(日) 07:27:55 ID:iMXoTcjW(1) AAS
一般的な方法としては、
・E=視点座標、つまりカメラの位置をあらわす位置ベクトル
・L=投影面における視点からマウスカーソルまでの半直線ベクトル
から、仮想空間内の任意の物体との交差判定、交差位置特定がきる。
Eは、普通、プログラム上で管理されている。
Lは、FOV(視野錘台)を自分で管理されているなら容易に計算できるが、
投影変換行列の逆行列を使っても計算できると思う(そういう便利な関数があるかもしれない)。
L = Mproj.inv x (mouseX,mouseY,1)T
Mprij.inv = 投影変換行列の逆行列
(mouseX,mouseY,1) = マウスの座標(正規化装置座標系、同次座標表現)
特に、フィールドのような単一平面との交点計算は、
・O=原点(フィールド面上にあること)
・N=フィールドの法線ベクトル(正規化ベクトル)
に対して、Eがフィールドの表面にあると限定した場合、
LとNの内積が0以上の場合、交差しない(マウスカーソルは天空を指している)
さもなければ、
・h= フィールド面からEまでの高さ((E-O)とNの内積)
から、
・t= -h/(LとNの内積)
を求めれば、目的とするフィールド上の点Fは、
・F= E+L*t
のような手順で計算できるはず。
あとは、(F-O)をフィールドの座標軸(X-O)(Y-O)で分解すれば、2次元座標に戻せる。
うろ覚えで書いているので細かい間違いがあるかも知れないが(違ってたら乞指摘)、
ゆっくりでいいんで、参考にしてもらえれば嬉しい。
頑張れ!
117: SGGK ◆6pZCoAtaxk [sage] 2010/10/11(月) 00:46:23 ID:LCOMmGvc(1) AAS
詳細な説明をありがとうございます。
やっぱり自分にはまだ難しすぎたようです…。
しかし、これが解らなければ>>115でやろうとしていることもライブラリ関数だけでは結局出来なさそうなので、
もう少し頑張ってみようと思います。1日の作業時間が短いので、何週間か掛かるかも…。
118(1): SGGK ◆6pZCoAtaxk [sage] 2010/10/30(土) 23:45:10 ID:DMcbgP8e(1) AAS
ま…まだ無理な感じ。何週間じゃなくて何カ月と書いておけばよかった…。
やっぱりある程度の知識が無いと理解が進まないような気がしてきた。
ある程度知識を持ってる前提でちょっとわからない用語を調べるのにはネットは役立つけど、
今の自分は3Dに関しほとんどが知らない用語ばかりで思考が進まないので勉強が足りないと感じた、
遠回りだろうけど、本屋に行きそこに置いてあった中から1冊選んで来た。
「実例で学ぶ3D数学」←生き物を表紙に多用しているオライリーシリーズのひとつで、前スレでもこの本を紹介してくれていた人がいた。
今は第7章で108ページまで読んだけど、自分には難しい内容。
式の証明があまり無い様で、わからない箇所については「そういうものなんだ」ということにして先に読み進めているところ。
9章(〜194ページ)まで読み終わったら、もう一度上記について考える予定。
119(5): 名前は開発中のものです。 [sage] 2010/10/31(日) 14:36:58 ID:Ha18eay7(1) AAS
ConvScreenPosToWorldPosのサンプル内でMV1CollCheck_Lineを使って
ポリゴン上のマウス座標を出してるっぽいのがあるよ
120(2): SGGK ◆6pZCoAtaxk [sage] 2010/11/01(月) 00:11:40 ID:IY/H8hBE(1) AAS
>>119
こ…、これは気付きませんでした。ありがとうございます。
試しにサンプルで使えそうな部分をコピーしてプログラムソースに貼り付けてまさかのコンパイル。
これではおそらくバグが山積みだろうと思ったら、予想外に通った。画像の文字の意味についてはまだ理解出来てません。
サンプルでは、スクリーン上のマウス座標から直線が延びているイメージで、ワールド座標内のポリゴンに当たったらそこが黄色になるという内容だろうと解釈。
マウスを左上に持っていくとフィールドの左上が黄色、右下にもっていくと右下が黄色、フィールド外だと変化なし。
とにかく反応していることが確かめられたので、このサンプルコードを自分がやろうとしていることを実現できるように
書き変えられるか考えてみようと思います。
参考画像をうp
外部リンク[html]:gamdev4.hp.infoseek.co.jp
もちろん>>116〜118についても継続するので、並行作業で行く予定。
121(1): 名前は開発中のものです。 [sage] 2010/11/04(木) 00:20:21 ID:DIpes90k(1) AAS
カキコがなくて心配してたよー
122: SGGK ◆6pZCoAtaxk [sage] 2010/11/04(木) 22:06:09 ID:vVAyUmeW(1) AAS
>>121
>118の本の学習がなかなか進まなかったため、ご無沙汰してしまいました。(汗;
ときどき停止するかもしれませんが頑張ります。
本の方は8章(〜144ページ)で一区切り。とりあえず8章まで読めればなんとかなりそうなので9章までの予定は中止。
14章も一部分だけ読んでみた。残りは必要なときが来たら挑戦するつもり。
>>116氏のをもう一度読んでみたところあともう少しでわかりそうな気がしてきたので、
あとはネット検索で投影変換行列を調べてみる予定。
123: SGGK ◆6pZCoAtaxk [sage] 2010/11/11(木) 00:10:14 ID:OH7eCgI8(1) AAS
>>116氏のアドバイスについて今の自分に出来るところまで図示で理解しようとしてみたのでUP。
視野錘台がうまく斜めに書けていないとかいろいろあるけど、
この状態からさらに理解が進めばDXライブラリを使って自分なりの関数をどのように作ればよいのかがわかるかも…、
そんな時が来るかもしれないと期待してここでいったん区切ることにしてみます。(感謝!)
いつも使わせてもらってたアップローダがサービス停止のようなので、いろいろ探して以下のところにしてみた。
(アップローダを使ってるスレを探してたらNE○Tスレを偶然見てこのアップローダの存在を知った。)
他にお勧めのアップローダがあれば、柔軟に対応します。
外部リンク:ux.getuploader.com
次は>>119氏のヒントを元に次の行動を決める予定
124(2): 名前は開発中のものです。 [sage] 2010/11/11(木) 00:28:36 ID:Jw3X6bp+(1) AAS
>>116 の Lは、
GetMousePoint( &Mx, &My ) ;
ConvScreenPosToWorldPos( VGet( Mx, My, 0.0f ) ) - E ;
で求まるんじゃないだろうか。
そこで詰まったんじゃないの?
125: SGGK ◆6pZCoAtaxk [sage] 2010/11/11(木) 23:34:05 ID:jPJR3Unn(1) AAS
>>124
アドバイス、ありがとうございます。
今度は練習プログラムの修正で確認してみようと思っています。
>>119と>>124の両方でやってみるつもり。
マウスが指し示すフィールド上の位置に何かオブジェクト(球体とか)を
表示出来れば上手くいったと考え、この前ベクトル化したプログラムの続きに入る予定。
126: SGGK ◆6pZCoAtaxk [sage] 2010/11/13(土) 00:09:26 ID:2/KX1c8L(1) AAS
作業時間10分なので何も出来ず…。
とりあえず半径10の球体を(100,0,0)、(0,100,0)、(0,0,100)の順番に表示させてみた。
これによれば、X軸は左方向がプラス、Y軸は上方向がプラス、Z軸は手前方向がプラスになっていたので、
DXライブラリは左手座標系なんだな〜と思ったところで終了。
127(1): 名前は開発中のものです。 [sage] 2010/11/13(土) 16:02:39 ID:V7u6UtpM(1/2) AAS
カメラの向きによるでしょ
128(1): 名前は開発中のものです。 [sage] 2010/11/13(土) 16:11:56 ID:V7u6UtpM(2/2) AAS
あ、座標系か。ゴメン
129(1): SGGK ◆6pZCoAtaxk [sage] 2010/11/15(月) 06:53:14 ID:vSKd6IqB(1) AAS
>>127,128
X軸は右方向がプラスの方が確かに分かりやすいのでカメラの位置と向きは変えようと思います。
いろいろ理由があり作業が止まったりしていますが、まだ諦めてはいません。(仮眠しようとしたら朝になってしまったとか…)
今のモデルは、フィールドが511x341(何故この数字にしたか忘れてしまった…)でその中心が原点(0,0,0)、
カメラの位置は(0,340,340)でカメラの注視点が原点(0,0,0)になっています。
作業の前にやっぱり簡単な例を用意して自分で(手作業で)変換行列を考えてみるところまで
やってみた方がいいかもしれないと思い始めてきたので、その作業分だけ進捗が遅れる可能性ありです。
130: SGGK ◆6pZCoAtaxk [sage] 2010/11/16(火) 00:25:11 ID:MqJY7qc7(1) AAS
今日はエクセルで準備的な作図を途中まで進めて終了。
書いた図が結局役に立たずに時間を無駄にする可能性もあるけどやってみる。
131(1): SGGK ◆6pZCoAtaxk [sage] 2010/12/13(月) 23:37:18 ID:X8dPGQWF(1) AAS
む…無駄になってしまった感じ。
図は書いてみたけど、座標変換について結局あまり理解出来てない事がわかった。
悩んだ結果、恥ずかしいほどに簡単な例を用意し、それを図にして考えてみた。
オブジェクト座標からワールド座標への変換はなんとなく分かったような気がしてきた。
カメラ座標への変換(ビュー変換?)については、オブジェクト座標からワールド座標への変換と同じやり方でたぶん出来るだろうということにして省略し、
今は透視変換について考えているところ。
132: SGGK ◆6pZCoAtaxk [sage] 2010/12/15(水) 00:31:39 ID:KxIpLRHt(1) AAS
やっぱりやめることにした。
わずか一日で目標変更…。
昨日の続きをやるとなれば、また数週間経過しそうでそれでいいのだろうかという不安が急に出てきた。
透視変換についても>108108(1): SGGK ◆6pZCoAtaxk [sage] 2010/10/01(金) 00:18:19 ID:EHwgOhQ3(1) AAS
>>107
ありがとうございます。3Dを不勉強なので、ビルボードも知りませんでした。
フィールドを3Dで表示して選手を2Dにして遠くにいる選手の画像は2Dのライブラリ関数で縮小表示できれば3Dらしくなるのではと自分はいままで思っていて、
しかしその縮小比率をどのように計算すれば良いのかが悩みどころでしたが、ビルボード関係を調べて何ができるのか読んでみると、
厚みのない画像でも3D空間の物体扱いにできてカメラ関数があればフィールドと一緒に選手も3D視できそうな気がしてきたので作業が進んだら挑戦してみたいと思います。
今日はホームページで3D関係を巡回したのみ。
3D空間からPC上のゲーム画面への座標変換を行うには、いろいろな行列を何度か掛ける必要があるとか、座標系の種類の説明がいろいろ。
これを理解してプログラムを書けるようになるにはどう考えても数カ月から…いや下手すれば数年かかるんじゃないかと感じた。
しかし、一方で昨日のDXライブラリのサンプル 32.3Dアクション基本 のソースを見る限りでは、行列を何回も掛けているような処理の記述は見当たらない。(探し下手で自分が見つけられていないだけかもしれないが…)
もしかすると、3D空間内にモデルを配置してカメラ関数の引数をセットすれば3D視できるその中に既にそういった計算が見えないところで行われてるのかもしれない。(これが>>103氏、>>104氏の言っていた事かもしれない)
とりあえずなんだかわからない状態だけど、なんらかのモデルを用意して、それを読み込んで画面に表示することに挑戦してみたい。
の頃の自分よりは理解してるつもりなので、とりあえずプログラムに戻り、それでダメならまた別の方法を考えよう。
133: SGGK ◆6pZCoAtaxk [sage] 2010/12/21(火) 22:35:38 ID:Uo1lQ495(1) AAS
変換についてやっぱりやめないで最後まで調べてUpするに方針変更。(葛藤し過ぎ)
できなければ出来たところまでをUpするつもり。
仕事じゃないんだし…、もう少し調べてみても無駄にはならないはず…。
趣味なんだからあまり無駄とか気にしないようにしよう!
今日は>>119氏のアドバイスのテストプログラムの動きの問題について考えてた。
>>120でプログラムが動いていたのは間違いないけど、画面左上に表示される
マウスでポイントした点が画面中のポリゴンと交差したところの点座標や他の情報を
表示している画面の文字がどんどん重なっていき見えなくなる問題が出ていた。
自分のプログラムでは、ClsDrawScreen と ScreenFlip() の間にゲームの中身の処理を
書いてループするようにしなければならないんだけど、テストプログラム用に無駄な箇所を消したり、注釈化していたときに
間違えてClsDrawScreenの行を //ClsDrawScreen のように注釈行化してしまっていたのが原因だとわかる。
気付くのに3日以上かかった(汗;)
ちなみにDXライブラリではClsDrawScreenは今でも使えるけれど、
公式のリファレンスからは削除されていて、代わりにClearDrawScreen()になっているという事をその時知った。
134: SGGK ◆6pZCoAtaxk [sage] 2010/12/30(木) 01:05:04 ID:8R77hh/I(1) AAS
年末休みだからとはいえさすがにもう寝なくては…。
>>131のカメラ座標への変換がなんとなくやっと理解出来たような感じ。
次は透視変換に挑戦。
ライブラリが無ければ自分は何も出来ないんだから座標変換勉強しても時間の無駄じゃないのか?
…という迷いはあるけど、あともう少しなのでこのまま進めてみるつもり…orz
上下前次1-新書関写板覧索設栞歴
あと 353 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.011s