[過去ログ] ゲームプログラミング相談室【Part5】 (970レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
9(1): [age] 02/11/07 01:44 ID:??? AAS
>>8
ふつう -G0
ってコンパイラ何使ってるかくらい書けヨ!
10(1): エックサー 02/11/07 19:03 ID:O6dqrNtE(1) AAS
DirectX8使ってるんですけど、メッシュの頂点の、ディスプレイ上での座標を知るにはどうしたらいいんですか?
11: 8 02/11/07 21:47 ID:??? AAS
>>9
Thanks
> ってコンパイラ何使ってるかくらい書けヨ!
確かに。想像の通り gcc です。
12(7): 02/11/08 13:56 ID:mLnGgDjl(1) AAS
わたしも 3D座標をスクリーン座標に変換する方法が知りたいです。
座標xyzをwで割るらしいのですが、xyzwの求め方がわかりません。
xyzはただの3D座標なのでしょうか? それとも何かの行列を
掛けたりしているのでしょうか?
wはどこからでてくるのでしょうか?
すみませんが 教えていただけませんか?
13(1): 02/11/08 14:34 ID:??? AAS
ビューと射影行列を掛けるだけ
DirectD3なりのレンダリングエンジンを使うにしても
描画前に行列をセットしていると思うが何が分からないのか分からん
14(1): 8 02/11/08 21:31 ID:??? AAS
STL の件だけど、要するに __malloc_alloc_oom_handler などの static 変数
が .sdata セクションに配置されるのが問題なんだね。
教えてもらった -G0 を使って「全部 .data セクションに置く」方法に加えて、
問題になってる変数に個別に __attribute__((section(".data"))) 指定する
方法でも動きました。
しかし、何で __malloc_alloc_oom_handler などのクラステンプレート中で
定義された static 変数に限って .sdata に配置できないのかは謎です。
省1
15(2): 02/11/08 21:41 ID:??? AAS
>>12
オブジェクトのローカル座標に、ローカル・ワールド変換行列、ワールド・ビュー
変換行列、ビュー・スクリーン変換行列(a.k.a 射影行列) と順にかけて、出てき
た座標を w で割れば良い。
行列だけど、DirectX 使ってるなら SetTransform() に
D3DTS_WORLD
D3DTS_VIEW
省5
16(1): 02/11/09 00:02 ID:??? AAS
>>14
gccって、vtblを.dataに吐いてたりしない?
17: 02/11/09 01:09 ID:0QThSDoj(1) AAS
>>15
そーゆー奴ってさワールドからローカルへの変換ができねぇってことだろ?
動いてる物体にのれないのはもちろんのこと
スキニングも理解してできてねぇだろ?
逆行列はしっかり理解してから次のステップへいってもらいたいね。
俺も会社入るまえそうだっただけに応援したいね。
ローカルに直せるってだけでかなりできることが増えるね。
省2
18(1): 8 02/11/09 01:16 ID:??? AAS
>>16
vtbl が配置されるセクションと、クラステンプレートの static 変数が配置される
セクションが違うと、何か問題がある? あと、今回の件に関しては STL のコン
テナが利用する allocator の話なんで、仮想関数は出てこないはず。
そもそも .sdata, .sbss に関しては、こういうことだと理解してるんだが、勘違い
があったら指摘して下さいな。
1. EE-core (っつーか MIPS) は 32bit 固定長命令を採用しており、アドレス
省13
19: 8 02/11/09 01:19 ID:??? AAS
>>18 の続き
そういうわけで gp がらみで問題になるのは
1. .sdata, .sbss が溢れるほど大量に static データを定義した場合
2. 翻訳単位によって、閾値が異なる場合。たとえば同一のグローバル変数を
参照するプログラムの片方を -G0 でコンパイル、他方を -G8 でコンパイル
とか。
3. $gp を書き換える場合。特に位置独立なコードを使うシェアードライブラリの
省4
20(1): 12 02/11/09 01:55 ID:s6gdDMqC(1/5) AAS
>>15
ビュー行列 と 射影行列を掛けたものと、 3D座標を 掛けたの
ですが、でた xyzwで
x/w
y/w
z/w
をやってみたのですよ。
省4
21(1): 02/11/09 01:58 ID:??? AAS
>>20
なんか微妙に日本語が変な気が。ありがちなのは行列をかける順番を
間違えてるとかだが。
> しかし、 値が1.0を超えているにもかかわらずスクリーンの端
> にまで、 ラインが(この時二つの座標を線で結んでいました。)
意味が良く分からん。
22: 12 02/11/09 02:14 ID:s6gdDMqC(2/5) AAS
>>21
すばやいレスありがとうございます。
2点をラインで描画しました。
ビュー行列 matView
射影行列 matProj
調べたい座標 Vec
計算後の値 v4
省14
23(2): 02/11/09 03:22 ID:gww9xFnI(1) AAS
ビューポートは考慮したーのーかーなーあーあーあーあ?
24: 12 02/11/09 03:44 ID:s6gdDMqC(3/5) AAS
>>23
すみません。 たしかに、 640,480のウインドウを値(1.0,1.0)に
する必要がありますが、 このビューポートを実際どのように
使えばいいのか。
25: 12 02/11/09 05:27 ID:s6gdDMqC(4/5) AAS
>>23
もとめられた値に windowのサイズの半分を掛けて
あげればよいのでしょうか?
640,480のウインドウなら320,240をそれぞれ掛けてあげる
x = x*320;
y = y*240;
それですと 一応それらしき値はでます。
26(1): 02/11/09 09:43 ID:iuRz/9+A(1) AAS
ちゅーしんをあーわーせーろー。
27: 02/11/09 14:55 ID:9m0Zluol(1) AAS
意外にみんな親切なのな。
28: 02/11/09 14:59 ID:??? AAS
誠意が見られるなら付き合うよ。
質問の仕方とか…ね。
29: 02/11/09 15:20 ID:m4HooRjJ(1) AAS
外部リンク[html]:alink3.uic.to
30: 12 02/11/09 17:41 ID:s6gdDMqC(5/5) AAS
>>26
>>ちゅーしんをあーわーせーろー。
中心ですか
どうやってあわせるのだろう・・・・・
視点と注視点から 角度を求めて それを 頂点に掛けて
あげるのでしょうか・・・
うーんでも、ビュー行列を掛けたときにすでに入っているような気も
省2
31: 02/11/09 21:43 ID:??? AAS
そういうのは3Dグラフィックの基礎知識だから、そっち方面の
参考書でも読んで勉強したほうがいいと思うぞ。
32: 02/11/09 22:11 ID:??? AAS
そだね。DirectX がどうこうの前に、基礎的な知識を習得したほうが近道だよ
試しに自力でライブラリ無しでポリゴン出してみなよ
ワイヤーフレームでいいからさ。いろいろ分かると思うよ
33(1): 02/11/10 00:18 ID:laxcwGaC(1) AAS
おーれーはーそーのーすーたーんーすーがきらーいだー。
目的地をみさーだーめーていっちーょくせんでりろーんはそーれーかーら
かーんーがえーるーのがーすーきーだ。
ちーなーみーにーちゅうーしーんをもとーめるーとゆーんは、
たーすーだーけーだーよ?あ?
で、あーとーはーじぶーんでなーんとかしれー
34(1): [age] 02/11/10 00:32 ID:??? AAS
>>8
誰なのかわかりますた ヽ(´ー` )ノ
初期化してないstatic class memberが
.bssに入らないで.dataセクションに
入っちゃうみたいだけど、それじゃない?
それが正しいのか間違ってるのかしらないけど。
外部リンク:chapuni.com
省1
35: 12 02/11/10 03:52 ID:CLex+uUH(1) AAS
>>33
私も とりあえず、足せば良いのかなと思いやってみたのですが
うまくいきませんでした。
>あーとーはーじぶーんでなーんとかしれー
いろいろご指導ありがとうございました。
いろいろ試して見たいと思います。
省1
36(2): 02/11/10 07:26 ID:??? AAS
オブジェクトのワールド座標ににプロジェクション行列の逆行列をかけて
求まったxとyを使えば良いんじゃねーの?
その時、原点は画面中央、640×480の場合、xが0なら
画面中央320って事じゃないの?
…漏れの環境だとね。
zはカリングで使うじゃない?マイナスだとカメラの後ろに来てるって事。
37(1): 02/11/10 11:38 ID:??? AAS
>>34
static class menber でも、問題が出るものと出ないものがあります。
普通のクラスの static member object -> 問題なし
テンプレートクラスの static member object -> relocation truncated ... でリンク時エラー
普通のクラスとテンプレートクラスで異なる点は、nm で見た限りだとシンボルが
weak か否かという点。テンプレートクラスの static member は複数の翻訳単位
でインスタンス化される可能性があるけど、リンク後には実体を 1 つにせにゃな
省6
38: 02/11/10 17:12 ID:X0lDMmpo(1) AAS
>>36
>オブジェクトのワールド座標ににプロジェクション行列の逆行列をかけて
>求まったxとyを使えば良いんじゃねーの?
これですと 値が変動するときは プロジェクション行列が変わった時だけ
なのでうまくいかないと思います。
39: 36 02/11/10 19:10 ID:??? AAS
ああ、すまんね。
こっちの環境だと、独自クラスのカメラてのがあって
毎フレーム、視錐台の変更って感じでやっているから出切るんだわ。
40: 前編 02/11/10 20:19 ID:JSg4/5lD(1/2) AAS
はいではやりかたを整理しましょう。
まず変換したいワールド座標にカメラの逆行列をかけます。
これはDIRECTXではGetTransなんとかでとれるあたいそのままです。
つぎにプロジェクションマトリクスをかけます。
これは大抵の環境で同じです。
それからビューポートの変換です。
これは640X480の場合は
41: 後編 02/11/10 20:29 ID:JSg4/5lD(2/2) AAS
X=(X/W)*320+320
Y=(Y/W)*-240+240
で終了です。
これはDIRECTXのヘルプにものっています。
ヘルプでビューポートで検索をかけるとみつかります。
これでできなかったら少し実際にものをだして動かしてみてはどうでしょうか?
42(1): 37 02/11/11 20:55 ID:??? AAS
解決しました。結論としては linker に読ませてるスクリプト指定が腐ってる、
.gnu.linkonce.s セクションのデータを $gp 相対でアクセスできそうなところに
配置しろ、ってことで。
(結局 gcc のソースを読む羽目になったよ……)
43(1): 02/11/12 00:59 ID:??? AAS
>>42
そんなんでgccのソース読む羽目になったの?
マップファイル見たらすぐわかりそうなのに。
44(1): 02/11/12 01:18 ID:??? AAS
>>43
それは「.gnu.linkonce.s セクションって何、どういう条件で作られるの?」っつー
のが、分からなかったから。推測はついたけど、裏をとらないと困るっしょ。
45(1): 02/11/12 01:35 ID:??? AAS
>>44
そこまで見たあんたに尋ねるが、ソノ環境で、vtblは何処に出てる?
.gnu.linkonce.d.vt とか、そんなんだと思う。
なんか、gccのデフォルトで、.dataの一部として吐かれるみたいなんだけど、
書き込み可能なセクションに吐く理由がわからなくて気になってるんだ・・・。
46(1): 02/11/12 21:24 ID:??? AAS
>>45
確かに .gnu.linkonce.d.__vt_なんちゃら セクションに書かれてる。
gcc/cp/class.c を読むと
#ifndef WRITABLE_VTABLE
TREE_READONLY (decl) = 1;
#endif
みたいな記述があるから .gnu.linkcode.r に配置されそうなもんだが。謎。
47: 02/11/13 00:43 ID:??? AAS
>>46
おお、そのマクロでしらべてみたら、なんかでてきたよ。
ありがとん。
で、デフォルトでそんなマクロは定義されないらしいのだが・・・。やはり謎。
48: あぼーん [あぼーん] あぼーん AAS
あぼーん
49(1): 02/11/16 22:06 ID:??? AAS
AA省
50: 02/11/16 23:26 ID:VL8Oafej(1) AAS
>>49
はやまるなー
51: 02/11/21 03:03 ID:277H+gCD(1) AAS
終了厨がおおいですなぁ
52: 02/12/06 07:52 ID:c2Ro9O0h(1) AAS
ここでも、保守。
53: あぼーん [あぼーん] あぼーん AAS
あぼーん
54(1): 02/12/09 22:53 ID:gy0Rwv2m(1) AAS
やる気のないゲームプログラマです。
丁度プロジェクトのハザマで暇なので
ツール作成でもしてみなさい、と上司に言われました。
イチから作成する根性もやる気もないのでとりあえず
VRAMを眺めるツールでも改造してみようかと思うんですが
どう改造したら勉強になるのか見当がつきません。
どうせ改造するならためになるほうがいいんだけど・・
省1
55: あぼーん [あぼーん] あぼーん AAS
あぼーん
56: 02/12/10 09:19 ID:JzMo+9Nz(1) AAS
>>54
アイタタ
57: あぼーん [あぼーん] あぼーん AAS
あぼーん
58: 02/12/23 20:03 ID:CHDaAJj8(1) AAS
誰も相談したい人いないのか?
59: 02/12/23 22:42 ID:frBmN/bA(1/2) AAS
ゲームのあたり判定ってどうやってるの?
精妙なあたり判定を作りたいときは大小の四角を何個か組み合わせればいいのかな?
60: 02/12/23 22:45 ID:mYrEUkS2(1) AAS
当たり判定用のデータを他に持つと簡単。
具体的なビットマップだったり、矩形だったりするが
それはゲーム依存。
当たりを判定して、何に使うかというのもポイントだったりするので
そのへんもデザインしよう。
61: 02/12/23 22:57 ID:frBmN/bA(2/2) AAS
なーるほど、サンクス!
62: 02/12/23 23:53 ID:OrL+tItn(1) AAS
12月、1月は一時閉鎖します。
63: あぼーん [あぼーん] あぼーん AAS
あぼーん
64(2): 02/12/25 01:36 ID:06ow8SQ/(1) AAS
mx・・・自機X座標、my・・・自機Y座標、mxa・・・自機X幅、mya・・・自機Y幅
ex・・・敵機X座標、ey・・・敵機Y座標、exa・・・敵機幅、eya・・・敵機Y幅
if ( (mx<ex+exa)&&(mx+mxa>ex)&&(my<ey+eya)&&(my+mya>ey) ) ...
シューティングのオーソドックス?な当たり判定はこんな感じのやり方しか
知らないんだけど他にはどんな方法がありますか?
ゲームやハードに依存しててもいいからいろんな判定の仕方が知りたいYO!
65(3): 02/12/25 02:21 ID:fYJY+WkT(1) AAS
説明めんどいのでこれで理解して。最近流行の弾幕系専用当り判定。
cEnemy…敵管理クラス。
cEnemy* hitRect[40][30];
cEnemy* pHitList = hitRect[mx/16][my/16];
while(pHitList != NULL){
if( pHitList->IsHit(mx,my) ) printf("どっかーん");
pHitList = pHitList->GetNext();
省1
66: 02/12/25 02:33 ID:BLeCLBHq(1/2) AAS
リスト内の各enemyに対して判定するってのは分かるけど、16って何?
67: 02/12/25 02:44 ID:e+neG+8z(1) AAS
16ドットって意味かな?
どちらにしろ定数にしておくべきだと思うが…。
68: 02/12/25 03:27 ID:BLeCLBHq(2/2) AAS
あぁ、640x480の画面を16x16に区切って、自機の近くのやつだけ判定したいってことか
69: あぼーん [あぼーん] あぼーん AAS
あぼーん
70: 02/12/25 07:56 ID:dIcCINXP(1/2) AAS
>>65
マジックナンバー使わんでくらはい(´д`;)
大きな判定の場合はどうするの?
複数のエリアに登録する?
71: 02/12/25 10:40 ID:vBfJXHZb(1) AAS
>>65
高速弾だとすり抜けが多発しそうだが、その辺は考慮に入れてあるのか?これ。
72: 02/12/25 10:48 ID:Bqxu+V45(1) AAS
ていうか、8ビットや16ビット時代ならともかく、最近のPCなら
たとえ弾幕系でも2Dシューティング程度の判定量で
んな小細工する必要皆無だと思うけど。
73: 02/12/25 11:18 ID:ufF3sG4T(1) AAS
一つの弾の判定に30クロックかかったとして(もっと少ないと思うけど)
1000個の弾との判定にかかるのは3万クロックだな。
60fpsで判定すると180万クロック。
1GHzのCPUなら0.2%で、2ミリ秒/秒だな。
安直にできそうなところはさっさとスルーしたほうがいいと思った。
74: あぼーん [あぼーん] あぼーん AAS
あぼーん
75: 64 02/12/25 14:47 ID:aHas5saF(1) AAS
>>65
ゴメン、C++はまだ勉強してないからわからない
スプライトを使った当たり判定をやりたいのだけれど・・・
76: 02/12/25 16:58 ID:dIcCINXP(2/2) AAS
Gems2の再帰的次元クラスタリング(Recursive Demiensinal Clustering: RDC)はどうよ?
計算量を、O(n^2)からO(nlog2n)までもっていけるらしい。
77(3): 02/12/25 19:40 ID:RXUO2PKH(1/4) AAS
C言語で時代に逆行した2Dアクションゲームを作ろうと思います。
まず何から作り始めると良いでしょうか?
78(1): 02/12/25 19:40 ID:/cDNIeOU(1) AAS
SRPGの移動に関するサンプルみたいなのありませんか?
79: あぼーん [あぼーん] あぼーん AAS
あぼーん
80(1): 02/12/25 21:16 ID:ocB35uV6(1/2) AAS
>>77
まずあなたがどこまでできてるのかがわからないことには・・・。
>>78
外部リンク:www.campus.ne.jp
ここの下のほうに解説ページがあるよ。
81(2): 77 02/12/25 21:26 ID:RXUO2PKH(2/4) AAS
>>80
うむ、確かにな。
プログラミングは教科書に載ってるようなやつなら簡単に理解できるくらい。
ゲーム系はまるっきりってとこでつ。
82(1): 02/12/25 21:37 ID:Kq2zu9Np(1/4) AAS
>>77
まずマップチップ(背景データの素材)を用意して
それを配置したマップデータを用意して
マップデータから1画面分のデータを読み込んでマップチップを貼り付けて
それをスクロールさせる(読み込み位置を変化)ところから。
グラフィック関係はBitblt関数でやってもいいしDirectX使ってもいいし。
素材が無いと気合入らない事もあるし・・・
省1
83: 02/12/25 21:43 ID:ocB35uV6(2/2) AAS
とりあえず>>82をやったあとは、
マップ上にキャラクターの絵を置いて、キーボード操作によって
キャラの位置を動かすのをやってみるといいかも。
習作としてはシューティングが最適だったりするんだよね。
重力の概念とか考えなくていいし。
84(1): 02/12/25 21:45 ID:C+V8gp8b(1) AAS
>>81
どんな教科書だ?
85(2): 81 02/12/25 21:59 ID:RXUO2PKH(3/4) AAS
なるほど、シューティングか。
サラマンダみたいなやつの背景をうごかせるようになればいいのか。
CとDirectX、どっちが関数使いやすいですかねぇ。
>>84
C言語の本で確か「初めてのC」って名前でした。
86: あぼーん [あぼーん] あぼーん AAS
あぼーん
87(1): 02/12/25 22:06 ID:Kq2zu9Np(2/4) AAS
>85
CでDirectXを操作するのだよ。DirectXは言語じゃない。
88: 02/12/25 22:09 ID:qyObx7qF(1/2) AAS
>87
うむ。
っつか素の ANSI C だとグラフィック関係を制御するライブラリ関数ないし。
89(1): 02/12/25 22:13 ID:Kq2zu9Np(3/4) AAS
言葉足らずだった。DirectXは慣れないと画面がパー、要再起動だから
C言語の関数でやってみてからDirectXに移行した方がいい。
グラフィックを扱う部分は大した量じゃないから後ですぐ移行出来る。
上下前次1-新書関写板覧索設栞歴
あと 881 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.021s