1人でゲームが作れるように修行します。2 (487レス)
1-

72: SGGK ◆6pZCoAtaxk 2010/09/05(日)00:15 ID:t7yjfHHg(1) AAS
>>71
す…凄いです。そうです!そのoperatorがなんとかというそれでした。
まだ自分は答えを見ても何がわからないかもわからない初心レベルですが感謝します。
処理速度が微妙であるとのコメントを参考にして、なんとか>70のやり方(C言語風?)でやれるよう頑張ってみます。
73
(1): SGGK ◆6pZCoAtaxk 2010/09/05(日)23:38 ID:glSoiJ6G(1) AAS
>>70の下から4行に書いたやり方は諦める事にした。
vector3.hにfloat frametime=0;と書いてコンパイルすると
frametimeは既に定義されてると言う内容のエラーが続々発生。
これは、vector3.hがいろんなcppファイルのヘッダーファイルにインクルードされてるからだろうと予想。
float frametime;と書き直しても同じ結果。初期化の有無は関係なかった様子。
vector3.hの中でfloat frametime;と書いておき、他のcppファイルでframetimeを使いたい場合には、
そのcppファイルのヘッダーファイルでなく、cppファイルの上の方の行でextern float frametime;と書いたら直った。
省4
74
(2): 2010/09/06(月)06:18 ID:WWj0DWld(1) AAS
・Vector3.hのクラス定義内にて、 static float frametime;
・適当なcppにて、float Vector3::frametime=初期値;
ということがしたいのかな?
75: SGGK ◆6pZCoAtaxk 2010/09/06(月)23:10 ID:5jVgy4R8(1) AAS
>>74
その通りです。
ただVector3.hでは、クラスの宣言や定義はしていなくて、ベクトルを表す構造体などを引数にしてベクトルを表す構造体をreturnする関数を宣言するのみ。
そうすればベクトル関係の関数は外部関数になってどのcppファイルからでも使えるかなというのを期待して書いてます。
そしてVector3.cppでその関数の定義をしようとすると関数内のframetimeという変数がメインループで計算するframetimeと名前を同じにしても
このままでは中身が別物なはずなので、Vector3.hかframetimeを使うcppファイルのどこかで1度だけ
frametimeを定義して、他の残りについては、extern float frametime;とすれば動きそうだと思ったわけです。
省3
76: SGGK ◆6pZCoAtaxk 2010/09/07(火)23:20 ID:qyxrqbqY(1) AAS
いままでのプログラムをベクトルを表す構造体で表現する変更作業の開始。
とりえあず先にヘッダーファイルだけを変更する予定。
しかし、ヘッダーファイルを変えただけでコンパイルすればcppファイルの方でエラーが出るはずなので、
ヘッダーファイルを全部コピーしてファイル名の前の方にv_を付けてファイル名を変えた方で変更作業する。
そうすれば、cppファイルと矛盾してエラーが出るという状態を避けられるはず。
そしてヘッダーファイルの変更が終われば、古いヘッダーファイルを削除して、新しいヘッダーファイルのファイル名からv_を取り除いて、
今度はcppファイルを直す。
省1
77: SGGK ◆6pZCoAtaxk 2010/09/08(水)23:42 ID:2FQaVedh(1) AAS
ヘッダファイルを4個書き直した。
あと12個残ってる。
78: SGGK ◆6pZCoAtaxk 2010/09/09(木)23:34 ID:u4JUxGaq(1) AAS
今日も4個しか出来なかった。
cppファイルを直す時に泥沼状態になる事を予想して、
変更箇所を表計算ソフト(エクセルのこと)にメモしながら進めてるから作業が遅いのかもしれない。
79: SGGK ◆6pZCoAtaxk 2010/09/12(日)23:34 ID:zuikLtmE(1) AAS
ヘッダファイルあと残り1つ。
これは選手の移動関数を定義してるファイルだけど、気になる箇所があった。
今のプログラムは、どのような速度のパソコンでも60Hzで1フレーム時間あたりの移動量を1〜20ドットにしたい場合の移動量を
20個の配列を用意して入れてるんだけど、これが外部の移動関数から読めてる。
…というのは知ってたけどそういえばextern使ってないのに何故だろうと思い、14歳わくわくC++を調べてみると、
メンバ関数やメンバ変数にstaticを付けるとグローバルな関数、変数扱いに出来るとのこと。
そして呼び出すときには、クラス名::変数または関数とすればよいらしい。
省8
80: SGGK ◆6pZCoAtaxk 2010/09/13(月)22:59 ID:621XmSry(1) AAS
ヘッダファイルの書き直しが完了。
何もヘッダファイルを読み込んでないヘッダファイルを先に直して、
ヘッダファイルの読み込みの少ないヘッダファイルを先に直すような順番で書き直していったからかどうかはわからないけど、
あまりバグが出なかった。次はcppファイルの書き直しに挑戦。たぶんもっと時間がかかるはず。
81: SGGK ◆6pZCoAtaxk 2010/09/14(火)22:23 ID:8SPHlgRS(1) AAS
とりあえず修正対象にするcppファイルを1つ選び、
そのcppファイルがインクルードしてるヘッダファイルのファイル名の頭に付けてたv_(←修正中のヘッダファイルに付けてたやつ)をはずして、
そのままでは古いヘッダファイルと同じ名前になってしまうので、先に古いヘッダファイルは別のフォルダに移動しておく。
そしてコンパイルしてみる。
一個ずつ直してみたがバグがなかなか減らないし、ヘッダファイルもコンパイルの画面に新旧入り混じっている状態では
かえってややこしくなってくる。
cppファイルも一個ずつ順番に直してバグが無くなったら次に…と思っていたが、
省6
82: SGGK ◆6pZCoAtaxk 2010/09/15(水)22:31 ID:/g+buLkb(1) AAS
昨日は一気に全部まとめてコンパイルしたけど、描画関係をまとめたcppファイルはその時点で修正済。
そうした上でのバグ349個。
その後の修正で何故かバグが358個まで増えたけど、なんとかして344個に減ったところで終了。(今日はちょっと疲労気味なので…)
83
(1): 2010/09/16(木)03:09 ID:OhUUY93b(1/2) AAS
コツコツ頑張ってて偉いなぁ…本気で尊敬する。
84
(2): STG 2010/09/16(木)03:35 ID:YtfF1rT+(1) AAS
俺はずっとモデリング勉強&練習…
85
(1): 2010/09/16(木)03:50 ID:OhUUY93b(2/2) AAS
>>84
ガンガレ超ガンガレ
俺もそろそろ頑張ってみるか…
86: SGGK ◆6pZCoAtaxk 2010/09/16(木)23:40 ID:62n4CZRN(1) AAS
>>83
自分はこの板のおかげでゲーム作りへの挑戦は約3年1ヶ月程続いているけど、あまり進んでいないかもしれません。が…頑張ります!。
>>84>>85
お互い頑張りましょ〜!期待してます。
87
(3): SGGK ◆6pZCoAtaxk 2010/09/17(金)00:11 ID:iwt7bbkw(1) AAS
ベクトルの構造体を宣言・定義したから、ボールや選手などのオブジェクトの
座標その他のメンバ変数を初期化するときには、例えば初期化関数の内部で
オブジェクト.x=848;
オブジェクト.y=544;
オブジェクト.z=0;
としていたのを
オブジェクト.構造体変数名 = {848、544、0};
省22
88
(1): 2010/09/17(金)02:15 ID:zNJRouQ+(1) AAS
>>87
見方を変えると「Cの構造体に関数も書けるようにしたものがC++の構造体」とも言えると思う
Cの構造体で出来ることはC++でもそっくりそのまま書けると思うんだけどね

>自分の気付かない理由で上手くいってない感じ。
バグに関して絶対こうだとは言えないが、CとC++の違いが原因ではないような気がするなー
89
(1): 2010/09/17(金)22:28 ID:pd/LBTti(1/2) AAS
>>87

x、y、zを初期化するコンストラクタを定義されていれば
オブジェクト.構造体変数名 = クラス名(848,544,0);
のような代入ができる。

もしくは、構造体変数をセットするメンバ関数を定義してもいいかも。
90
(2): 2010/09/17(金)22:40 ID:pd/LBTti(2/2) AAS
上の補足

コンストラクタを定義していなければ、
オブジェクト.構造体変数名 = {848,544,0};
のような代入もできる。
91
(1): 2010/09/17(金)23:57 ID:iQtTD6+I(1) AAS
>>90
それは初期化時のみじゃない?

struct vector{
int x,y,z;
};

void main(){
vector a = { 1,2,3 }; //ok
省2
92
(2): SGGK ◆6pZCoAtaxk 2010/09/18(土)01:00 ID:wU0YURT9(1) AAS
ありがとうございます。今日は調べるだけで終了でした…。
>>88
たしかにバグの原因がCとC++の違いだと思い込んでしまうと他の原因の可能性を見落としやすくなりそうなので気をつけます。
>>89
今のソースではベクトル関係がクラスでなく構造体で表現されていてコンストラクタについてはまだ考えてませんでした。
バグが結局取り切れなかった場合、勉強しなおしてベクトル関係もクラス化する最終手段に挑戦してみようと思います。
>>90
省12
93
(1): 2010/09/18(土)01:45 ID:ZJvrb5gA(1/3) AAS
>>92
>ベクトル関係もクラス化する最終手段に挑戦してみようと思います。
>>87は自分で書いててよく分かってないみたいだけど、classとstructは根本的には同じもの

struct Vector3{
Vector3(float x_, float y_, float z_): x(x_), y(y_), z(z_){}
float x,y,z;
};
省6
94
(1): 2010/09/18(土)01:56 ID:ZJvrb5gA(2/3) AAS
>>92
>Vector3 a1={848,544,0};
>fp.xy(←これは昨日書いていたオブジェクト.構造体変数名の事)=a1;
ちょっとこのレスで、代入のコストが気になったんで検証してみた

struct A{
A(){}
A(int x_, int y_, int z_): x(x_), y(y_), z(z_){}
省21
95
(1): 2010/09/18(土)02:09 ID:ZJvrb5gA(3/3) AAS
最初Bの方が遅かったのは、operator=のオーバーロード
つまり関数オーバーヘッド分の差が出たのだろう

変数を増やすとAが遅くなるのは、ほぼ間違いなくコピーコンストラクタが発生してるからだろう
ここら辺は言語仕様のレベルでBのような代入にしてくれてもいいような気がするなー

ま、結論としてはoperator=は弄らない方が速い
96
(1): SGGK ◆6pZCoAtaxk 2010/09/20(月)00:00 ID:y8zi6Evk(1) AAS
>>93>>94>>95
詳細な解説に感謝します。
自分にはまだ難しすぎるのですが、「c++  構造体の代入 問題点」で検索してみたところ、
以下のHPがこれらを理解するのに参考になり(理解は出来ず雰囲気だけなんとなく自分に伝わったような感じ。)、
リンク先はpdfなので要注意かもしれませんが、
外部リンク[pdf]:ist.ksc.kwansei.ac.jp
の12〜13ページあたりで、C++にはいろいろな種類のコンストラクタがあり、
省4
97: SGGK ◆6pZCoAtaxk 2010/09/20(月)23:18 ID:L4tJFEVm(1) AAS
今日もあまり作業出来てないけど、バグの残り36個。
98: SGGK ◆6pZCoAtaxk 2010/09/21(火)23:17 ID:48pAG2m3(1) AAS
やっとバグが0個になった。エラーメッセージが0個になったと言う方が正しい表現に近いかもしれない。
しかし、画面でスタート直後にボールに近い選手が通常よりも早いスピードで画面外に出ていくような動きをして、
画面端に到達してそこから動かなくなる問題が出た。
やっぱり出た。エラーメッセージの出ないバグが…。
もしも、>>96のようなコンストラクタがどうのこうのが理由で動かないとなるとやっかいな予感。
自分は>>96はもちろんのこと今までに難しいといったところはなかなか理解が出来てないから…。
99: SGGK ◆6pZCoAtaxk 2010/09/22(水)23:13 ID:gcFU0B9v(1) AAS
バグはまだ取れない。
選手が画面やレーダーに表示されてるという事は、画面の表示範囲を決めてるカメラ関係のところに原因があるという可能性はなさそう。
選手の座標を計算してる箇所を調べる。今書いてる計算式は、説明を省くのでわかりにくいけど、以下のような内容。

fp->xy = AddVector(fp->xy,MulVector(sv,Application::frametime/sq));

Application::frametimeの中身が気になったので、printfDx( " frametime = %f \n" , frametime ) ;で調べると、
15.100000と表示された。もう一回やり直すと15.633333と出た。
このframetimeは、dxライブラリのGetNowCount()を毎ループに1回計算し、
省7
100: SGGK ◆6pZCoAtaxk 2010/09/23(木)21:24 ID:3ixO7vXf(1/2) AAS
選手がボールに向かわないバグが解決した。
選手とボールの距離とそのx、y成分を計算するために座標の引き算をしたが、
選手座標 − ボール座標としてたのが間違い。
ボール座標 − 選手座標が正解。
でも何故かこれでもバグは解消されなかった。
本当の原因は、

違う場所を直していた。
省12
101: SGGK ◆6pZCoAtaxk 2010/09/23(木)21:46 ID:3ixO7vXf(2/2) AAS
プログラムにベクトルの表現を取り入れる作業は一区切り付いたけど、
これはあくまで>>65の目標に取り組めるようにするための準備段階なので、
次は画面関係の修正に挑戦する予定。
まだ方法を考えてる段階なので簡単には進みそうにない予感。
少し斜めから見たフィールド画像でプレイできるようにするのが目標だけど、
ネットではパースというキーワードで検索するものの即取り入れ可能な事を書いてるホームページにはまだ出会えていない。
他には動画サイトで昔のサッカーゲームの画像を見て、参考に出来るところが無いか調査中。
102
(3): SGGK ◆6pZCoAtaxk 2010/09/25(土)00:13 ID:Q7QeFJjp(1) AAS
パース、その他いろいろなキーワードで検索したが見つからず。
いますぐどこかの3Dライブラリを理解できるレベルではないのでかなり困った状況。
大体イラスト関係のホームページがよくヒットして消失点という言葉が出てきて、
これを考えればフィールドの形を遠近法的な台形形状に書くことは出来るだろうけど、
例えばその台形のフィールドに奥行きと高さ方向にメッシュを入れる時、何を基準にすればよいのかを詳しく説明してるところを見つけられず、
結局参考にならなかった。奥行きのメッシュは遠くになるにつれて間隔が狭くなると思うけど、それを決定する基準がわからないという意味。
そしてしばらくまた探していると、とあるホームページで人間の目は並行ではなく放射状にものを見ているとの記述があり、
省1
103
(2): 2010/09/25(土)00:26 ID:j8zDlksV(1) AAS
>>102
3Dライブラリを使うのが結局は楽だよ
(描画効率を無視するとして)
フィールドのモデルとプレイヤーのモデルを配置
カメラ位置・方向を決定したら draw 一発
難しい事を考えなくて済む
104
(2): 2010/09/25(土)00:50 ID:Djp6Vs3v(1) AAS
>>102
確かに3Dライブラリを教科書どおりに使えば簡単にできることだけど
敢えて自力で計算してみようというなら
「透視投影変換」、「同次座標表現」で検索するといいかも。
105: SGGK ◆6pZCoAtaxk 2010/09/26(日)01:06 ID:CCDwSOVy(1) AAS
ありがとうございます。ちょっと考えてみます。
>>103
3Dの勉強を全くしていない状態なので、知識のない自分には3Dライブラリを使うのは無理かと思ってたけど、
すぐに諦める前にもう少しだけ調べてみようと思います。
>>104
「透視投影変換」、「同次座標表現」のキーワード、感謝します。パース等ではなかなか役立つホームページがヒットしなかったので…。
すぐには理解できないけど、検索結果のホームページの内容の方が自分の思いつきより洗練されてるので、3Dライブラリ使用が無理な場合、次の手段として挑戦しようと思います。
省4
106
(1): SGGK ◆6pZCoAtaxk 2010/09/29(水)23:24 ID:ixkP0mUb(1) AAS
DXライブラリ3Dでプログラムを組むための参考になりそうなホームページがどうも無さそうなので、
DXライブラリ置き場ホームページに行き、サンプルプログラムの

32.3Dアクション基本  を見るが複雑すぎて今は無理と判断。
31.迷路を3Dで表示   も難しいが、プログラムのソースにあるカメラの命令のリファレンスを見てみるもののやっぱりよくわからない。

>>102で言ってた2Dだけで自分で計算するか悩んだが、その前にあと一つ試せる方法があったのでやってみた。
今まで書いてたプログラムの状態や画面の遷移、得点、時間表示などを削除し、
3D円錐の描画命令をコピペし、上記で言ってたカメラの命令をコピペしてみたら描画された。
省5
107
(1): 2010/09/29(水)23:40 ID:UzXxGPtF(1) AAS
>>106
2Dの絵がすでにあるならビルボードでググってみるとよろしかろう
108
(1): SGGK ◆6pZCoAtaxk 2010/10/01(金)00:18 ID:EHwgOhQ3(1) AAS
>>107
ありがとうございます。3Dを不勉強なので、ビルボードも知りませんでした。
フィールドを3Dで表示して選手を2Dにして遠くにいる選手の画像は2Dのライブラリ関数で縮小表示できれば3Dらしくなるのではと自分はいままで思っていて、
しかしその縮小比率をどのように計算すれば良いのかが悩みどころでしたが、ビルボード関係を調べて何ができるのか読んでみると、
厚みのない画像でも3D空間の物体扱いにできてカメラ関数があればフィールドと一緒に選手も3D視できそうな気がしてきたので作業が進んだら挑戦してみたいと思います。

今日はホームページで3D関係を巡回したのみ。
3D空間からPC上のゲーム画面への座標変換を行うには、いろいろな行列を何度か掛ける必要があるとか、座標系の種類の説明がいろいろ。
省4
109
(1): SGGK ◆6pZCoAtaxk 2010/10/04(月)23:34 ID:OotJcuep(1) AAS
DXライブラリのサンプルプログラムで拡張子mqoというのがあり、メタセコイアのファイルのことだとわかったので、
金曜日の夜にメタセコイアR2.4(フリーの方)をインストールした。
モデルをつくる技術が無いので、面→基本図形で面を生成し、材質設定で緑色を指定するにたどりつくまででもかなりの時間がかかった。
サンプルプログラムのやり方を真似してこの平面モデルのmqoファイルを読み込み、表示させようとしたが、
最初は全く表示されず、表示されても白黒だったりしたが、ファイル作るところからやり直してみたら今度は表示された。
結局原因は不明。次は今までの選手の2D画像を平面モデルに張り付けられるのかに挑戦。
110
(1): 2010/10/06(水)18:41 ID:WfQHbqcm(1) AAS
>>109
頑張れ!
111: SGGK ◆6pZCoAtaxk 2010/10/07(木)00:39 ID:uuBtJJiv(1) AAS
>>110
今は全ての作業が試行錯誤なので遅くなっているけど頑張ります!

選手の画像を1コマ切り取り、同じサイズの平面をメタセコイアで作成して
その平面に選手の画像を貼ろうとしたが失敗。
この処理はUVマップと呼ばれてるらしいが、とりあえず貼り付けをやめてxz面に垂直なただの平面を作り、
フィールドの次に描画させようとしたら表示されず。
何回かやり直していたら、フィールドと小さな平面が表示されたところで終了。(原因不明)
112: SGGK ◆6pZCoAtaxk 2010/10/07(木)23:46 ID:IVAUpJqc(1) AAS
フィールドの平面モデルにネットのフリー素材のフィールド画像を張り付けてみようとしたら何故か出来た。
UVマッピングとかいまだに解ってないので偶然できただけ。
ビルボードで選手を描画するのは難しい事がわかってきた。
DrawBillboard3D関数が使えるかなと思ってリファレンスを見たら、画像のサイズは自分で入力しなければならないので、
この関数仕様だと、いろんな位置や角度で見たときの選手がどの程度の大きさで見えてるかを自分で計算出来る必要があり、これを実現するのは難しいと思った。
すぐ諦めるのはどうかと思いつつも、最初に諦めてたモデルを配置してカメラ関数で見てもらうやり方を検討することにして今日は終了。
とりあえずは、選手を円筒か何か簡単なモデルで表現して配置してどのように見えるかを目標にする。
113
(1): 2010/10/08(金)00:25 ID:lwTrudzA(1) AAS
>いろんな位置や角度で見たときの選手がどの程度の大きさで見えてるかを自分で計算出来る必要があり
DXライブラリ使った事ないので的外れかもしれないけど
こういうのって普通ビュー変換で処理されるんじゃないのか
114: SGGK ◆6pZCoAtaxk 2010/10/09(土)01:18 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の値を入力し直す必要があるのかと勘違いしてしまってた。
省3
115
(2): SGGK ◆6pZCoAtaxk 2010/10/10(日)00:13 ID:U9No5w8c(1) AAS
今日は進捗なし…orz
毎日何か進捗のある状態に持っていくことの難しさを痛感。
とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。
今まで書いてた2D平面版ではマウスカーソルの位置に選手が向かうようにしていたので同じ操作方法を使えるようにしたいのが理由。
2D版では、ゲーム画面(640X480)の左上角の座標がゲームのフィールド全体の座標でみたとき(WX、WY)という座標で、
マウスカーソルの画面での座標が(X、Y)としたとき、マウスカーソルのフィールド上での座標値は(WX+X、WY+Y)になる。
3Dでもこれに相当する処理をしたいけど、3Dになるとカメラの位置が立体的に変化するからどうすればよいか想像が付かない。
省4
116
(8): 2010/10/10(日)07:27 ID:iMXoTcjW(1) AAS
一般的な方法としては、
・E=視点座標、つまりカメラの位置をあらわす位置ベクトル
・L=投影面における視点からマウスカーソルまでの半直線ベクトル
から、仮想空間内の任意の物体との交差判定、交差位置特定がきる。

Eは、普通、プログラム上で管理されている。

Lは、FOV(視野錘台)を自分で管理されているなら容易に計算できるが、
投影変換行列の逆行列を使っても計算できると思う(そういう便利な関数があるかもしれない)。
省19
117: SGGK ◆6pZCoAtaxk 2010/10/11(月)00:46 ID:LCOMmGvc(1) AAS
詳細な説明をありがとうございます。
やっぱり自分にはまだ難しすぎたようです…。
しかし、これが解らなければ>>115でやろうとしていることもライブラリ関数だけでは結局出来なさそうなので、
もう少し頑張ってみようと思います。1日の作業時間が短いので、何週間か掛かるかも…。
118
(1): SGGK ◆6pZCoAtaxk 2010/10/30(土)23:45 ID:DMcbgP8e(1) AAS
ま…まだ無理な感じ。何週間じゃなくて何カ月と書いておけばよかった…。
やっぱりある程度の知識が無いと理解が進まないような気がしてきた。
ある程度知識を持ってる前提でちょっとわからない用語を調べるのにはネットは役立つけど、
今の自分は3Dに関しほとんどが知らない用語ばかりで思考が進まないので勉強が足りないと感じた、
遠回りだろうけど、本屋に行きそこに置いてあった中から1冊選んで来た。
「実例で学ぶ3D数学」←生き物を表紙に多用しているオライリーシリーズのひとつで、前スレでもこの本を紹介してくれていた人がいた。
今は第7章で108ページまで読んだけど、自分には難しい内容。
省2
119
(5): 2010/10/31(日)14:36 ID:Ha18eay7(1) AAS
ConvScreenPosToWorldPosのサンプル内でMV1CollCheck_Lineを使って
ポリゴン上のマウス座標を出してるっぽいのがあるよ
120
(2): SGGK ◆6pZCoAtaxk 2010/11/01(月)00:11 ID:IY/H8hBE(1) AAS
>>119
こ…、これは気付きませんでした。ありがとうございます。
試しにサンプルで使えそうな部分をコピーしてプログラムソースに貼り付けてまさかのコンパイル。
これではおそらくバグが山積みだろうと思ったら、予想外に通った。画像の文字の意味についてはまだ理解出来てません。
サンプルでは、スクリーン上のマウス座標から直線が延びているイメージで、ワールド座標内のポリゴンに当たったらそこが黄色になるという内容だろうと解釈。
マウスを左上に持っていくとフィールドの左上が黄色、右下にもっていくと右下が黄色、フィールド外だと変化なし。
とにかく反応していることが確かめられたので、このサンプルコードを自分がやろうとしていることを実現できるように
省4
121
(1): 2010/11/04(木)00:20 ID:DIpes90k(1) AAS
カキコがなくて心配してたよー
122: SGGK ◆6pZCoAtaxk 2010/11/04(木)22:06 ID:vVAyUmeW(1) AAS
>>121
>118の本の学習がなかなか進まなかったため、ご無沙汰してしまいました。(汗;
ときどき停止するかもしれませんが頑張ります。

本の方は8章(〜144ページ)で一区切り。とりあえず8章まで読めればなんとかなりそうなので9章までの予定は中止。
14章も一部分だけ読んでみた。残りは必要なときが来たら挑戦するつもり。
>>116氏のをもう一度読んでみたところあともう少しでわかりそうな気がしてきたので、
あとはネット検索で投影変換行列を調べてみる予定。
123: SGGK ◆6pZCoAtaxk 2010/11/11(木)00:10 ID:OH7eCgI8(1) AAS
>>116氏のアドバイスについて今の自分に出来るところまで図示で理解しようとしてみたのでUP。
視野錘台がうまく斜めに書けていないとかいろいろあるけど、
この状態からさらに理解が進めばDXライブラリを使って自分なりの関数をどのように作ればよいのかがわかるかも…、
そんな時が来るかもしれないと期待してここでいったん区切ることにしてみます。(感謝!)

いつも使わせてもらってたアップローダがサービス停止のようなので、いろいろ探して以下のところにしてみた。
(アップローダを使ってるスレを探してたらNE○Tスレを偶然見てこのアップローダの存在を知った。)
他にお勧めのアップローダがあれば、柔軟に対応します。
省2
124
(2): 2010/11/11(木)00:28 ID:Jw3X6bp+(1) AAS
>>116 の Lは、
GetMousePoint( &Mx, &My ) ;
ConvScreenPosToWorldPos( VGet( Mx, My, 0.0f ) ) - E ;
で求まるんじゃないだろうか。

そこで詰まったんじゃないの?
125: SGGK ◆6pZCoAtaxk 2010/11/11(木)23:34 ID:jPJR3Unn(1) AAS
>>124
アドバイス、ありがとうございます。
今度は練習プログラムの修正で確認してみようと思っています。
>>119>>124の両方でやってみるつもり。
マウスが指し示すフィールド上の位置に何かオブジェクト(球体とか)を
表示出来れば上手くいったと考え、この前ベクトル化したプログラムの続きに入る予定。
126: SGGK ◆6pZCoAtaxk 2010/11/13(土)00:09 ID:2/KX1c8L(1) AAS
作業時間10分なので何も出来ず…。
とりあえず半径10の球体を(100,0,0)、(0,100,0)、(0,0,100)の順番に表示させてみた。
これによれば、X軸は左方向がプラス、Y軸は上方向がプラス、Z軸は手前方向がプラスになっていたので、
DXライブラリは左手座標系なんだな〜と思ったところで終了。
127
(1): 2010/11/13(土)16:02 ID:V7u6UtpM(1/2) AAS
カメラの向きによるでしょ
128
(1): 2010/11/13(土)16:11 ID:V7u6UtpM(2/2) AAS
あ、座標系か。ゴメン
129
(1): SGGK ◆6pZCoAtaxk 2010/11/15(月)06:53 ID:vSKd6IqB(1) AAS
>>127,128
X軸は右方向がプラスの方が確かに分かりやすいのでカメラの位置と向きは変えようと思います。
いろいろ理由があり作業が止まったりしていますが、まだ諦めてはいません。(仮眠しようとしたら朝になってしまったとか…)
今のモデルは、フィールドが511x341(何故この数字にしたか忘れてしまった…)でその中心が原点(0,0,0)、
カメラの位置は(0,340,340)でカメラの注視点が原点(0,0,0)になっています。
作業の前にやっぱり簡単な例を用意して自分で(手作業で)変換行列を考えてみるところまで
やってみた方がいいかもしれないと思い始めてきたので、その作業分だけ進捗が遅れる可能性ありです。
130: SGGK ◆6pZCoAtaxk 2010/11/16(火)00:25 ID:MqJY7qc7(1) AAS
今日はエクセルで準備的な作図を途中まで進めて終了。
書いた図が結局役に立たずに時間を無駄にする可能性もあるけどやってみる。
131
(1): SGGK ◆6pZCoAtaxk 2010/12/13(月)23:37 ID:X8dPGQWF(1) AAS
む…無駄になってしまった感じ。
図は書いてみたけど、座標変換について結局あまり理解出来てない事がわかった。
悩んだ結果、恥ずかしいほどに簡単な例を用意し、それを図にして考えてみた。
オブジェクト座標からワールド座標への変換はなんとなく分かったような気がしてきた。
カメラ座標への変換(ビュー変換?)については、オブジェクト座標からワールド座標への変換と同じやり方でたぶん出来るだろうということにして省略し、
今は透視変換について考えているところ。
132: SGGK ◆6pZCoAtaxk 2010/12/15(水)00:31 ID:KxIpLRHt(1) AAS
やっぱりやめることにした。
わずか一日で目標変更…。
昨日の続きをやるとなれば、また数週間経過しそうでそれでいいのだろうかという不安が急に出てきた。
透視変換についても>108の頃の自分よりは理解してるつもりなので、とりあえずプログラムに戻り、それでダメならまた別の方法を考えよう。
133: SGGK ◆6pZCoAtaxk 2010/12/21(火)22:35 ID:Uo1lQ495(1) AAS
変換についてやっぱりやめないで最後まで調べてUpするに方針変更。(葛藤し過ぎ)
できなければ出来たところまでをUpするつもり。
仕事じゃないんだし…、もう少し調べてみても無駄にはならないはず…。
趣味なんだからあまり無駄とか気にしないようにしよう!

今日は>>119氏のアドバイスのテストプログラムの動きの問題について考えてた。
>>120でプログラムが動いていたのは間違いないけど、画面左上に表示される
マウスでポイントした点が画面中のポリゴンと交差したところの点座標や他の情報を
省7
134: SGGK ◆6pZCoAtaxk 2010/12/30(木)01:05 ID:8R77hh/I(1) AAS
年末休みだからとはいえさすがにもう寝なくては…。
>>131のカメラ座標への変換がなんとなくやっと理解出来たような感じ。
次は透視変換に挑戦。
ライブラリが無ければ自分は何も出来ないんだから座標変換勉強しても時間の無駄じゃないのか?
…という迷いはあるけど、あともう少しなのでこのまま進めてみるつもり…orz
135: SGGK ◆6pZCoAtaxk 2010/12/30(木)16:53 ID:4FkYuEBu(1) AAS
やっと出来た。
間違いや内容不足はあるかもしれないけど、>>129の11月15日頃からの作業がやっと終了…。
1ページ目は結局使わなかった図。
2ページ目以降の8枚が勉強メモ。

外部リンク:ux.getuploader.com

オブジェクト座標系からスクリーン座標系まで勉強.zip
省1
136: 2011/01/01(土)02:34 ID:iSY3aMmJ(1) AAS
P2_page001〜004を見た。

そもそも何をしたいのか読み取れなかったけれども、
最初の赤枠の大前提については、ボールの位置はワールド座標系で管理して、
必要に応じて選手目線の相対座標(オブジェクト座標)を求める方が簡単じゃないかな。
137: SGGK ◆6pZCoAtaxk 2011/01/01(土)22:31 ID:85GGaF9K(1) AAS
見てくれてありがとうございます。

自分はDXライブラリが無ければ何もプログラムできないので、
プログラムに直接影響しない事を調べてもあまり意味が無いのではないかと思う一方で
座標変換には3D入門の基本のような印象を持っていたので、
もし出来るならちょっと調べてみたいと思ったのが原因で1か月以上経過してしまいました…。

赤枠については今見ると自分もそう思います。
ボールに一番近い選手を知りたいなら選手の座標とボールの座標を
省6
138: SGGK ◆6pZCoAtaxk 2011/01/13(木)23:49 ID:XHIcVK/b(1) AAS
データはなんとか用意出来た。32ドット四方の面に選手移動アニメの一コマを貼り、
左歩行に2枚、右歩行に2枚、赤選手と青選手があるから(2+2)x2=8個のテクスチャ付き面モデルを作成。
上と下の歩行描写は省くことにした。
テクスチャの貼り方はなんとか分かったけど、今まで使っていた16コマを1枚にしていた2Dデータから
1コマずつ切り出すのに手間取った。
EDGEというソフトを使ってみたが、マウスできちんと32x32で選べない。
なんとなく「edge グリッド表示」でネット検索してみると、「ツクールの素材を作る」という名前で以下がヒット。
省5
139
(1): SGGK ◆6pZCoAtaxk 2011/01/17(月)23:51 ID:Px2vRAS2(1) AAS
>>115で言った
>とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。
については、どうやら出来そうな感じ。

それを表す図やテストプログラムの実行ファイルをUPしようかと思ったけど、
テストプログラムでは、試したいDXライブラリの関数をメインループにそのまま書き込んだだけなので、
今までのクラスを使ったやり方に比べ単純な例で試して上手くいったと自分が思っているだけなのかもしれないので、
今度は、今までの2Dで動かしていたプログラムの中身を少しずつ3Dのライブラリ関数に置き換えて
省10
140
(1): SGGK ◆6pZCoAtaxk 2011/01/18(火)23:06 ID:IAGIcn+p(1) AAS
いざソースを書き直そうとするもののどこから手を付ければ良いのか見当がつかない。(いまさら何を言ってるのかと思われそうだけど…)
今出てる問題は、今までのプログラムにベクトルが使えるようにするために追加したクラス、関数(ベクトル同士の加算、減算とか)が
既にDXライブラリに用意されていて、当然DXライブラリの方が関数の種類も多い。
かといって今まで書いた自分のベクトル用関数もソースのあちこちに散っているので、
これをいますぐDXライブラリの関数に置き換えるのは数カ月単位の時間を要するのは確実。

とりあえず、
自分の書いたクラスVector3 ←中身はx,y,zだけ
省19
141: SGGK ◆6pZCoAtaxk 2011/01/19(水)23:11 ID:VXY/IGc8(1) AAS
念の為もうひとつ確認しておこうと思い、テストプログラムでメインループの中に
Zキーを押したら選手のx座標を少しずつ増やしていく処理を追加してみた。
コンパイルして実行してみたら選手の絵がx方向に動いた。
3Dのビルボードの命令で描画した選手でもいままでの2D命令でやったとき同様に動く事が確認できた。

これで多少は安心してソースの書き直しに着手できる…と思う。
142: 2011/01/20(木)00:55 ID:yl8ufdN1(1) AAS
C#囓った俺だったら、Vecrot3にToVECTOR()関数を追加するかな
Vector3 a;
VECTOR b = a.ToVECTOR();
って書けるようにする

普段はVector3を使って、必要に応じてVECTORを吐き出すというイメージ
VECTORからVector3への変換はしない、という仕様にした方が多分デバッグは楽になると思う
143: SGGK ◆6pZCoAtaxk 2011/01/20(木)23:35 ID:hnrlJRek(1) AAS
アドバイス、ありがとうございます。
確かに変数の型はどちらかに統一しておいた方が良さそうなので注意します。
変数はVector3に統一し、DXライブラリの関数の引数と出力の型がVECTORだった場合には、
引数に関しては、Vector3型をVECTOR型に変換した値を入力して、
VECTOR型出力に関しては、そのつど出力のx,y,z値をVector3型変数に入力すれば、>>140で言った
VECTOR型変数をVector3型に変換する関数は使わなくて済むので、これでやってみます。

今日のプログラム修正は、データのロード部分のみ。少しずつ進めていく予定。
144: SGGK ◆6pZCoAtaxk 2011/02/09(水)21:46 ID:iFm8dF3D(1) AAS
修正が思い通りに進まないので悩む。
また以前のようにクラス図の様な図を書いて整理してからソースを修正した方がいいのだろうかと思ったが、
エクセルで書こうとするととても時間が掛かるので、クラス図を書くためのフリーソフトが無いか探してみた。

UMLdraw フリー版とシェア版があり、フリーでは印刷できないので不可。
UMLmemo  フリー、印刷無し、ビットマップ出力ありだけど、書いたテキストの空白が改行マークで埋め尽くされて見づらいので不可。
astah* community 無償版、印刷あるけど大きさの調整不可、使い方が難しいので不可。

無理してastah* communityでクラス図もどきを途中まで書いてなんとなく思い始める。
省6
145
(1): SGGK ◆6pZCoAtaxk 2011/02/11(金)22:55 ID:83OV5fAw(1) AAS
テキストファイルからの読み込みをやると言ってすぐ壁に突き当たる。
選手のポジション(FWなど)を列挙型定数にしているけど、これは読み込めないらしい。
全てのデータをテキストファイルから読み込む方法に変える必要はないと思うので、
これについては、選手のゲームスタート直後の座標だけをテキストから読み込めるようにすればいいかなと考えた。

選手のデータ関係の修正作業は途中だけど、ちょっと中止。(方針変更しすぎ・・・)

クラス図を途中まで書いたときに感じた事だけど、状態を表す定数の追加やそれを使った分岐が
ソースを見づらくしており、他にも理由がいろいろあって、このまま気になったところから直してコンパイルしてもたぶん地獄の修正作業になると思った。
省6
146: SGGK ◆6pZCoAtaxk 2011/02/14(月)00:35 ID:hwQDV7I3(1) AAS
11,12,13日の3連休では無理だった。(作業時間もすごく短いので・・・)
エラーの数は、20個→8個→30個と変わり、結局増えてしまった。
ゲームのループとそこから呼び出す関数はそんなに変更ないけど、
そこから先は思った以上に作り直しに近い感じなってしまった。
まだ先だけど、状態管理の定数を使った分岐処理もできればメインループの外に出したい。

一つの値があったとして、その値が自作のVector3型だったり、
ある時はDXライブラリのVECTOR型だったりするため、変換の方向を
省4
147: SGGK ◆6pZCoAtaxk 2011/02/15(火)23:25 ID:mNvxRe1H(1) AAS
やっとフィールドの表示が出来た。
今まではソースを書きかえる時に元のソースの先頭に//を付けてコメント化して、
いざという時に前の状態に戻しやすくできるようにしていたけど、これをやめて
コメントを減らしてソースを見やすくするようにした。
戻りたいときにはバックアップのソースを見ればいいのだから。
バックアップはコンパイルした時に出来るファイルを含め全部保存していたが、
考えてみるとプログラムソース(ヘッダファイルとCPPファイル)だけを保存しておけばよかった。
省1
148
(1): 2011/02/17(木)01:19 ID:s7Rh9Whn(1) AAS
パージョン管理ツールを使うと躊躇なく修正できるよ
subversionがおすすめ
149: SGGK ◆6pZCoAtaxk 2011/02/18(金)00:25 ID:0vaBqQnH(1) AAS
>>148
パージョン管理ツールの存在を知りませんでしたので勉強になりました。
「subversion ゲームプログラム」で検索してみるとかなり難しいツールのようです。
難しくてもインストールして触るところまではネットで調べて試してみようと思います。
ありがとうございました。

現在の進捗は、選手関係のファイルをコンパイル対象の場所に戻して、
>145でやりかけてた選手の初期化関係を修正中。
150
(1): 2011/02/24(木)13:41 ID:UHwXurlZ(1) AAS
ふと、このスレのこと思い出して帰ってきたけど
まだSGGK氏が頑張っててちょっと感動した
151
(1): STG 2011/02/24(木)23:36 ID:x+thpv+K(1) AAS
当分書き込んでないけど俺もいるぜー。3Dモデル全般の勉強でなかなか進まない
SGGK氏がんばってるなー
152: SGGK ◆6pZCoAtaxk 2011/02/25(金)23:02 ID:uikGAaqm(1) AAS
>>150
思い出して戻ってきてくれる人がいる事に感動です!
まだまだ頑張ります!
>>151
お久しぶりです!
お互い目標目指して頑張っていきましょう〜!!
1-
あと 335 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s