5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

ゲームプログラミング相談室【Part5】

1 :名前は開発中のものです。:02/11/04 20:41 ID:a1Mhmm8N
ゲームプログラミング全般の質問スレッド。
扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
 
■前スレ
【Part4】http://game.2ch.net/test/read.cgi/gamedev/1005040025/
■旧スレ(プログラム技術板)
【Part1】http://piza.2ch.net/tech/kako/969/969984472.html
【Part2】http://pc.2ch.net/tech/kako/985/985540361.html
【Part3】http://pc.2ch.net/tech/kako/1002/10028/1002894129.html
■関連スレなど
>>2-5

2 :名前は開発中のものです。:02/11/04 20:42 ID:???
■関連スレ
○【初心者歓迎】スレを立てる前にココで質問を【その3】
http://game.2ch.net/test/read.cgi/gamedev/1032814540/
○物凄い勢いで誰かが質問に答えるスレ@ゲ製板 4つめ
(※第3スレ後半〜第4スレ前半は一時的な紛争地域)
http://game.2ch.net/test/read.cgi/gamedev/1035601681/
○鬱だ氏のう DirectX  (DirectXに関する話題)
http://game.2ch.net/test/read.cgi/gamedev/1033920036/

3 :名前は開発中のものです。:02/11/04 20:49 ID:???
age

4 :あぼーん:あぼーん
あぼーん

5 :名前は開発中のものです。:02/11/04 22:41 ID:???
乙彼〜

6 :名前は開発中のものです。:02/11/06 00:04 ID:???


7 :名前は開発中のものです。:02/11/06 00:20 ID:Hy1yMbKx
age


8 :名前は開発中のものです。:02/11/06 20:50 ID:mrrgYg+p
某 MIPS 系のマシンで STL コンテナを使おうとすると、リンク時に "relocation
truncated"と怒られる。どうも template がらみでできる weak object の配置に
失敗してるみたいだけど、解決策知ってる人います?

(確かに MIPS だとグローバルポインタ相対でアクセスするから、配置する箇所に
よってはグローバル変数といえどアクセスできなくなるよな。ld に喰わせるスクリ
プトファイル書けばいいのか?)

9 :名前は開発中のものです。:02/11/07 01:44 ID:???
>>8
ふつう -G0

ってコンパイラ何使ってるかくらい書けヨ!

10 :エックサー:02/11/07 19:03 ID:O6dqrNtE
DirectX8使ってるんですけど、メッシュの頂点の、ディスプレイ上での座標を知るにはどうしたらいいんですか?

11 :8:02/11/07 21:47 ID:???
>>9
Thanks

> ってコンパイラ何使ってるかくらい書けヨ!
確かに。想像の通り gcc です。

12 :名前は開発中のものです。:02/11/08 13:56 ID:mLnGgDjl
わたしも 3D座標をスクリーン座標に変換する方法が知りたいです。

 座標xyzをwで割るらしいのですが、xyzwの求め方がわかりません。
 xyzはただの3D座標なのでしょうか? それとも何かの行列を
 掛けたりしているのでしょうか?
 wはどこからでてくるのでしょうか?

 すみませんが 教えていただけませんか?
 

13 :名前は開発中のものです。:02/11/08 14:34 ID:???
ビューと射影行列を掛けるだけ
DirectD3なりのレンダリングエンジンを使うにしても
描画前に行列をセットしていると思うが何が分からないのか分からん

14 :8:02/11/08 21:31 ID:???
STL の件だけど、要するに __malloc_alloc_oom_handler などの static 変数
が .sdata セクションに配置されるのが問題なんだね。

教えてもらった -G0 を使って「全部 .data セクションに置く」方法に加えて、
問題になってる変数に個別に __attribute__((section(".data"))) 指定する
方法でも動きました。

しかし、何で __malloc_alloc_oom_handler などのクラステンプレート中で
定義された static 変数に限って .sdata に配置できないのかは謎です。
.sdata や.sbss 使い切るほど static 変数定義してないんだけど。

15 :名前は開発中のものです。:02/11/08 21:41 ID:???
>>12
オブジェクトのローカル座標に、ローカル・ワールド変換行列、ワールド・ビュー
変換行列、ビュー・スクリーン変換行列(a.k.a 射影行列) と順にかけて、出てき
た座標を w で割れば良い。

行列だけど、DirectX 使ってるなら SetTransform() に

D3DTS_WORLD
D3DTS_VIEW
D3DTS_PROJECTION

という第一引数を指定して渡してるヤツ。

>>13
まぁ、サンプルコードを深く理解せずに copy & paste してるんでしょう。趣味
でプログラミングしてるなら、そういう態度もアリだとは思うよ。

16 :名前は開発中のものです。:02/11/09 00:02 ID:???
>>14
gccって、vtblを.dataに吐いてたりしない?

17 :名前は開発中のものです。:02/11/09 01:09 ID:0QThSDoj
>>15
そーゆー奴ってさワールドからローカルへの変換ができねぇってことだろ?
動いてる物体にのれないのはもちろんのこと
スキニングも理解してできてねぇだろ?

逆行列はしっかり理解してから次のステップへいってもらいたいね。
俺も会社入るまえそうだっただけに応援したいね。
ローカルに直せるってだけでかなりできることが増えるね。
なにいってるかわかんなくなったね。
じゃあね

18 :8:02/11/09 01:16 ID:???
>>16
vtbl が配置されるセクションと、クラステンプレートの static 変数が配置される
セクションが違うと、何か問題がある? あと、今回の件に関しては STL のコン
テナが利用する allocator の話なんで、仮想関数は出てこないはず。

そもそも .sdata, .sbss に関しては、こういうことだと理解してるんだが、勘違い
があったら指摘して下さいな。

1. EE-core (っつーか MIPS) は 32bit 固定長命令を採用しており、アドレス
 空間も 32bit ある。
2. したがって 1 命令で 32bit の任意のアドレスにアクセスすることはできない。
 どうしてもアクセスしたければ
 a) まず 16bit をレジスタの上位アドレスに読み込み
 b) 次にオフセット付きメモリ参照命令を使って、メモリにアクセス
 と 2 命令使う。
3. それだと効率が悪いので、汎用レジスタの一つ ($gp) をグローバルポインタ
 として固定した値を入れて利用。static なデータは $gp から 16bit 相対で
 アクセスできる範囲に入れておく。(これが .sdata と .sbss)

当然 16bit 相対でアクセスできる範囲は限られるから、そこから溢れたデータ
は効率悪くても 2 の方法でアクセスする必要がある。gcc は標準では 8byte
以下のデータは .sdata, .sbss セクションに、それ以上のデータは .data, .bss
セクションに格納する。この閾値は、必要に応じて -G オプションで変更できる。

19 :8:02/11/09 01:19 ID:???
>>18 の続き

そういうわけで gp がらみで問題になるのは

1. .sdata, .sbss が溢れるほど大量に static データを定義した場合
2. 翻訳単位によって、閾値が異なる場合。たとえば同一のグローバル変数を
 参照するプログラムの片方を -G0 でコンパイル、他方を -G8 でコンパイル
 とか。
3. $gp を書き換える場合。特に位置独立なコードを使うシェアードライブラリの
 関数を呼ぶ場合。(ふつー Global Offset Table 用意して、$gp 書き換えた上
 で関数を呼ぶスタブを作る)

といった場合。クラステンプレートの static 変数が関わるとは思えんのよ。
PS2 Linux だとなんの問題もなく動いたような気がするし。

20 :12:02/11/09 01:55 ID:s6gdDMqC
>>15
ビュー行列 と 射影行列を掛けたものと、 3D座標を 掛けたの
ですが、でた xyzwで 
x/w
y/w
z/w
をやってみたのですよ。 
しかし、 値が1.0を超えているにもかかわらずスクリーンの端
にまで、 ラインが(この時二つの座標を線で結んでいました。)
届いてませんでした。

なので、 やり方が違うのかなとおもいまして・・・・


21 :名前は開発中のものです。:02/11/09 01:58 ID:???
>>20
なんか微妙に日本語が変な気が。ありがちなのは行列をかける順番を
間違えてるとかだが。

> しかし、 値が1.0を超えているにもかかわらずスクリーンの端
> にまで、 ラインが(この時二つの座標を線で結んでいました。)
意味が良く分からん。

22 :12:02/11/09 02:14 ID:s6gdDMqC
>>21
すばやいレスありがとうございます。

2点をラインで描画しました。

ビュー行列 matView
射影行列  matProj
調べたい座標 Vec
計算後の値 v4
mat = matView * matProj 

D3DXVec3Transform(&v4,Vec,mat);

Vecとmatを計算して求められた 値をwで割る
v4.x/v4.w
v4.y/v4.w
v4.z/v4.w
ここで スクリーン座標が求められるはずです。
スクリーン座標の値は xyに関しては -1〜1 zは 0〜1に なるはず
だけれど、 その値を超えたにもかかわらず そのラインは
画面の端まで届きませんでした。

mat = matProj* matView
でやってみても 値は変わりますが、 ラインが端まで届きません。
なので、計算の仕方が間違ってるのか、それか根本が間違っている
かどちらかだとおもうのです。 




23 :名前は開発中のものです。:02/11/09 03:22 ID:gww9xFnI
ビューポートは考慮したーのーかーなーあーあーあーあ?

24 :12:02/11/09 03:44 ID:s6gdDMqC
>>23
すみません。 たしかに、 640,480のウインドウを値(1.0,1.0)に
する必要がありますが、 このビューポートを実際どのように
使えばいいのか。

25 :12:02/11/09 05:27 ID:s6gdDMqC
>>23
 もとめられた値に windowのサイズの半分を掛けて
 あげればよいのでしょうか?

640,480のウインドウなら320,240をそれぞれ掛けてあげる
 x = x*320;
y = y*240;
 それですと 一応それらしき値はでます。




26 :名前は開発中のものです。:02/11/09 09:43 ID:iuRz/9+A
ちゅーしんをあーわーせーろー。


27 :名前は開発中のものです。:02/11/09 14:55 ID:9m0Zluol
意外にみんな親切なのな。


28 :名前は開発中のものです。:02/11/09 14:59 ID:???
誠意が見られるなら付き合うよ。
質問の仕方とか…ね。

29 :名前は開発中のものです。:02/11/09 15:20 ID:m4HooRjJ
http://alink3.uic.to/user/ranran2.html

30 :12:02/11/09 17:41 ID:s6gdDMqC
>>26
>>ちゅーしんをあーわーせーろー。
 中心ですか
 どうやってあわせるのだろう・・・・・
 視点と注視点から 角度を求めて それを 頂点に掛けて
 あげるのでしょうか・・・
 うーんでも、ビュー行列を掛けたときにすでに入っているような気も
 しないでもないですね。
 

31 :名前は開発中のものです。:02/11/09 21:43 ID:???
そういうのは3Dグラフィックの基礎知識だから、そっち方面の
参考書でも読んで勉強したほうがいいと思うぞ。

32 :名前は開発中のものです。:02/11/09 22:11 ID:???
そだね。DirectX がどうこうの前に、基礎的な知識を習得したほうが近道だよ
試しに自力でライブラリ無しでポリゴン出してみなよ
ワイヤーフレームでいいからさ。いろいろ分かると思うよ

33 :名前は開発中のものです。:02/11/10 00:18 ID:laxcwGaC
おーれーはーそーのーすーたーんーすーがきらーいだー。
目的地をみさーだーめーていっちーょくせんでりろーんはそーれーかーら
かーんーがえーるーのがーすーきーだ。
ちーなーみーにーちゅうーしーんをもとーめるーとゆーんは、
たーすーだーけーだーよ?あ?
で、あーとーはーじぶーんでなーんとかしれー

34 :名前は開発中のものです。:02/11/10 00:32 ID:???
>>8
誰なのかわかりますた ヽ(´ー` )ノ

初期化してないstatic class memberが
.bssに入らないで.dataセクションに
入っちゃうみたいだけど、それじゃない?
それが正しいのか間違ってるのかしらないけど。

http://chapuni.com/topics/psx/

でも、やっぱ -G0

35 :12:02/11/10 03:52 ID:CLex+uUH
>>33

 私も とりあえず、足せば良いのかなと思いやってみたのですが
 うまくいきませんでした。

>あーとーはーじぶーんでなーんとかしれー
 いろいろご指導ありがとうございました。
 
 いろいろ試して見たいと思います。
 

36 :名前は開発中のものです。:02/11/10 07:26 ID:???
オブジェクトのワールド座標ににプロジェクション行列の逆行列をかけて
求まったxとyを使えば良いんじゃねーの?
その時、原点は画面中央、640×480の場合、xが0なら
画面中央320って事じゃないの?
…漏れの環境だとね。
zはカリングで使うじゃない?マイナスだとカメラの後ろに来てるって事。

37 :名前は開発中のものです。:02/11/10 11:38 ID:???
>>34
static class menber でも、問題が出るものと出ないものがあります。

 普通のクラスの static member object -> 問題なし
 テンプレートクラスの static member object -> relocation truncated ... でリンク時エラー

普通のクラスとテンプレートクラスで異なる点は、nm で見た限りだとシンボルが
weak か否かという点。テンプレートクラスの static member は複数の翻訳単位
でインスタンス化される可能性があるけど、リンク後には実体を 1 つにせにゃな
らんので weak object になってる。

それで weak object + .sdata セクションという組み合わせが悪いのかと思ったの
だけど、違うのかなぁ。(これ以上は binutils のソース読まんと解決しないような
気がしてきた)

> でも、やっぱ -G0
らじゃ。

38 :名前は開発中のものです。:02/11/10 17:12 ID:X0lDMmpo
>>36
  >オブジェクトのワールド座標ににプロジェクション行列の逆行列をかけて
>求まったxとyを使えば良いんじゃねーの?
これですと 値が変動するときは プロジェクション行列が変わった時だけ
  なのでうまくいかないと思います。

  

39 :36:02/11/10 19:10 ID:???
ああ、すまんね。
こっちの環境だと、独自クラスのカメラてのがあって
毎フレーム、視錐台の変更って感じでやっているから出切るんだわ。

40 :前編:02/11/10 20:19 ID:JSg4/5lD
はいではやりかたを整理しましょう。
まず変換したいワールド座標にカメラの逆行列をかけます。
これはDIRECTXではGetTransなんとかでとれるあたいそのままです。
つぎにプロジェクションマトリクスをかけます。
これは大抵の環境で同じです。
それからビューポートの変換です。
これは640X480の場合は


41 :後編:02/11/10 20:29 ID:JSg4/5lD
X=(X/W)*320+320
Y=(Y/W)*-240+240
で終了です。
これはDIRECTXのヘルプにものっています。
ヘルプでビューポートで検索をかけるとみつかります。
これでできなかったら少し実際にものをだして動かしてみてはどうでしょうか?

42 :37:02/11/11 20:55 ID:???
解決しました。結論としては linker に読ませてるスクリプト指定が腐ってる、
.gnu.linkonce.s セクションのデータを $gp 相対でアクセスできそうなところに
配置しろ、ってことで。

(結局 gcc のソースを読む羽目になったよ……)

43 :名前は開発中のものです。:02/11/12 00:59 ID:???
>>42
そんなんでgccのソース読む羽目になったの?
マップファイル見たらすぐわかりそうなのに。

44 :名前は開発中のものです。:02/11/12 01:18 ID:???
>>43
それは「.gnu.linkonce.s セクションって何、どういう条件で作られるの?」っつー
のが、分からなかったから。推測はついたけど、裏をとらないと困るっしょ。

45 :名前は開発中のものです。:02/11/12 01:35 ID:???
>>44
そこまで見たあんたに尋ねるが、ソノ環境で、vtblは何処に出てる?
.gnu.linkonce.d.vt とか、そんなんだと思う。

なんか、gccのデフォルトで、.dataの一部として吐かれるみたいなんだけど、
書き込み可能なセクションに吐く理由がわからなくて気になってるんだ・・・。

46 :名前は開発中のものです。:02/11/12 21:24 ID:???
>>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:???
>>46
おお、そのマクロでしらべてみたら、なんかでてきたよ。
ありがとん。

で、デフォルトでそんなマクロは定義されないらしいのだが・・・。やはり謎。

48 :あぼーん:あぼーん
あぼーん

49 :名前は開発中のものです。:02/11/16 22:06 ID:???
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |  ここでおしまい  |
 |________|
    ∧∧ ||
    ( ゚д゚) ||
    / づΦ

50 :名前は開発中のものです。:02/11/16 23:26 ID:VL8Oafej
>>49
はやまるなー

51 :名前は開発中のものです。:02/11/21 03:03 ID:277H+gCD
終了厨がおおいですなぁ

52 :名前は開発中のものです。:02/12/06 07:52 ID:c2Ro9O0h
ここでも、保守。

53 :あぼーん:あぼーん
あぼーん

54 :名前は開発中のものです。:02/12/09 22:53 ID:gy0Rwv2m
やる気のないゲームプログラマです。
丁度プロジェクトのハザマで暇なので
ツール作成でもしてみなさい、と上司に言われました。
イチから作成する根性もやる気もないのでとりあえず
VRAMを眺めるツールでも改造してみようかと思うんですが
どう改造したら勉強になるのか見当がつきません。
どうせ改造するならためになるほうがいいんだけど・・
ハードはGBAです、どなたかお知恵を。。


55 :あぼーん:あぼーん
あぼーん

56 :名前は開発中のものです。:02/12/10 09:19 ID:JzMo+9Nz
>>54
アイタタ

57 :あぼーん:あぼーん
あぼーん

58 :名前は開発中のものです。:02/12/23 20:03 ID:CHDaAJj8
誰も相談したい人いないのか?

59 :名前は開発中のものです。:02/12/23 22:42 ID:frBmN/bA
ゲームのあたり判定ってどうやってるの?
精妙なあたり判定を作りたいときは大小の四角を何個か組み合わせればいいのかな?

60 :名前は開発中のものです。:02/12/23 22:45 ID:mYrEUkS2
当たり判定用のデータを他に持つと簡単。
具体的なビットマップだったり、矩形だったりするが
それはゲーム依存。

当たりを判定して、何に使うかというのもポイントだったりするので
そのへんもデザインしよう。

61 :名前は開発中のものです。:02/12/23 22:57 ID:frBmN/bA
なーるほど、サンクス!

62 :名前は開発中のものです。:02/12/23 23:53 ID:OrL+tItn
12月、1月は一時閉鎖します。

63 :あぼーん:あぼーん
あぼーん

64 :名前は開発中のものです。:02/12/25 01:36 ID:06ow8SQ/
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 :名前は開発中のものです。:02/12/25 02:21 ID:fYJY+WkT
説明めんどいのでこれで理解して。最近流行の弾幕系専用当り判定。

cEnemy…敵管理クラス。

cEnemy* hitRect[40][30];
cEnemy* pHitList = hitRect[mx/16][my/16];

while(pHitList != NULL){
if( pHitList->IsHit(mx,my) ) printf("どっかーん");
pHitList = pHitList->GetNext();
}


66 :名前は開発中のものです。:02/12/25 02:33 ID:BLeCLBHq
リスト内の各enemyに対して判定するってのは分かるけど、16って何?

67 :名前は開発中のものです。:02/12/25 02:44 ID:e+neG+8z
16ドットって意味かな?
どちらにしろ定数にしておくべきだと思うが…。

68 :名前は開発中のものです。:02/12/25 03:27 ID:BLeCLBHq
あぁ、640x480の画面を16x16に区切って、自機の近くのやつだけ判定したいってことか

69 :あぼーん:あぼーん
あぼーん

70 :名前は開発中のものです。:02/12/25 07:56 ID:dIcCINXP
>>65
マジックナンバー使わんでくらはい(´д`;)

大きな判定の場合はどうするの?
複数のエリアに登録する?



71 :名前は開発中のものです。:02/12/25 10:40 ID:vBfJXHZb
>>65
高速弾だとすり抜けが多発しそうだが、その辺は考慮に入れてあるのか?これ。

72 :名前は開発中のものです。:02/12/25 10:48 ID:Bqxu+V45
ていうか、8ビットや16ビット時代ならともかく、最近のPCなら
たとえ弾幕系でも2Dシューティング程度の判定量で
んな小細工する必要皆無だと思うけど。

73 :名前は開発中のものです。:02/12/25 11:18 ID:ufF3sG4T
一つの弾の判定に30クロックかかったとして(もっと少ないと思うけど)
1000個の弾との判定にかかるのは3万クロックだな。
60fpsで判定すると180万クロック。
1GHzのCPUなら0.2%で、2ミリ秒/秒だな。

安直にできそうなところはさっさとスルーしたほうがいいと思った。

74 :あぼーん:あぼーん
あぼーん

75 :64:02/12/25 14:47 ID:aHas5saF
>>65
ゴメン、C++はまだ勉強してないからわからない
スプライトを使った当たり判定をやりたいのだけれど・・・

76 :名前は開発中のものです。:02/12/25 16:58 ID:dIcCINXP
Gems2の再帰的次元クラスタリング(Recursive Demiensinal Clustering: RDC)はどうよ?
計算量を、O(n^2)からO(nlog2n)までもっていけるらしい。

77 :名前は開発中のものです。:02/12/25 19:40 ID:RXUO2PKH
C言語で時代に逆行した2Dアクションゲームを作ろうと思います。
まず何から作り始めると良いでしょうか?

78 :名前は開発中のものです。:02/12/25 19:40 ID:/cDNIeOU
SRPGの移動に関するサンプルみたいなのありませんか?

79 :あぼーん:あぼーん
あぼーん

80 :名前は開発中のものです。:02/12/25 21:16 ID:ocB35uV6
>>77
まずあなたがどこまでできてるのかがわからないことには・・・。

>>78
http://www.campus.ne.jp/~ishigami/CREATION/
ここの下のほうに解説ページがあるよ。

81 :77:02/12/25 21:26 ID:RXUO2PKH
>>80
うむ、確かにな。
プログラミングは教科書に載ってるようなやつなら簡単に理解できるくらい。
ゲーム系はまるっきりってとこでつ。

82 :名前は開発中のものです。:02/12/25 21:37 ID:Kq2zu9Np
>>77
まずマップチップ(背景データの素材)を用意して
それを配置したマップデータを用意して
マップデータから1画面分のデータを読み込んでマップチップを貼り付けて
それをスクロールさせる(読み込み位置を変化)ところから。
グラフィック関係はBitblt関数でやってもいいしDirectX使ってもいいし。
素材が無いと気合入らない事もあるし・・・

2Dアクションって・・・シューティング以外の格闘系だったりする?・・・

83 :名前は開発中のものです。:02/12/25 21:43 ID:ocB35uV6
とりあえず>>82をやったあとは、
マップ上にキャラクターの絵を置いて、キーボード操作によって
キャラの位置を動かすのをやってみるといいかも。
習作としてはシューティングが最適だったりするんだよね。
重力の概念とか考えなくていいし。

84 :名前は開発中のものです。:02/12/25 21:45 ID:C+V8gp8b
>>81
どんな教科書だ?

85 :81:02/12/25 21:59 ID:RXUO2PKH
なるほど、シューティングか。
サラマンダみたいなやつの背景をうごかせるようになればいいのか。
CとDirectX、どっちが関数使いやすいですかねぇ。

>>84
C言語の本で確か「初めてのC」って名前でした。

86 :あぼーん:あぼーん
あぼーん

87 :名前は開発中のものです。:02/12/25 22:06 ID:Kq2zu9Np
>85
CでDirectXを操作するのだよ。DirectXは言語じゃない。

88 :名前は開発中のものです。:02/12/25 22:09 ID:qyObx7qF
>87
うむ。

っつか素の ANSI C だとグラフィック関係を制御するライブラリ関数ないし。

89 :名前は開発中のものです。:02/12/25 22:13 ID:Kq2zu9Np
言葉足らずだった。DirectXは慣れないと画面がパー、要再起動だから
C言語の関数でやってみてからDirectXに移行した方がいい。
グラフィックを扱う部分は大した量じゃないから後ですぐ移行出来る。

90 :85:02/12/25 22:15 ID:RXUO2PKH
なるほふぉ。
勘違いしてました。

今手元にあるヴィジュアルCはグラフィック関係を制御できますか?


91 :名前は開発中のものです。:02/12/25 22:26 ID:Kq2zu9Np
http://www.sun-inet.or.jp/%7Eyaneurao/
VC持ってるんならここのスクリプトを使えばいい。
ここの講座もためになる。

92 :名前は開発中のものです。:02/12/25 22:40 ID:qyObx7qF
>>89
> C言語の関数でやってみてからDirectXに移行した方がいい。
要らぬ誤解を招かぬように「まずは Win32 API (GDI)」とでも言っておいた方が
良いと思われ。

標準 C ライブラリ関数には GUI 関係は全く既定ないから。(それどころか CUI
のスクリーン制御さえ既定ないわけだが)

> 今手元にあるヴィジュアルCはグラフィック関係を制御できますか?
もちろん。

Win32 API でプログラム組みたいなら、「プログラミング Windows」って本がバイ
ブル。分厚い本だが、懇切丁寧に書いてあるから読むのは難しくない。

93 :名前は開発中のものです。:02/12/26 03:31 ID:sowo2pdC
>>92 APIについて
Windows95 APIバイブル1も一冊あるとかなり便利。
ただ、ヘルプを読んでれば十分という話も。

94 :あぼーん:あぼーん
あぼーん

95 :名前は開発中のものです。:02/12/26 11:15 ID:9T0jKzma
VC++をC++とは違う言語と思ってる人もたまに見かけるよね。
VC++ == MFC みたいな

96 :名前は開発中のものです。:02/12/26 12:11 ID:FD9iJ3tp
VC++は製品名
C++は言語

97 :名前は開発中のものです。:02/12/26 12:12 ID:LkNUpvkb
言語仕様的には標準のC++とVCのC++はかなり異なる

98 :名前は開発中のものです。:02/12/26 13:16 ID:u+QTkfIN
g++も標準C++からかけ離れすぎ

99 :あぼーん:あぼーん
あぼーん

100 :90:02/12/26 19:37 ID:kDKABYvS
くじけそうです。
VC++の使い方が分かりません。

101 :名前は開発中のものです。:02/12/26 21:26 ID:KKaDaCig
なにがやりたくてなにがやれないのか説明しる

102 :名前は開発中のものです。:02/12/26 21:29 ID:bqU4KP+U
>98
拡張機能多いからな。インラインアセンブラ, typeof, 可変引数を使える #define と
か便利。

話が変わるが、頂点ブレンディング。剛体変換を行う複数の行列 M1, M2, ... と、
頂点毎に重み w1, w2, ... を用意して

 M = Σwi * Mi (ただし Σwi = 1)

で出した M を使うってのは分かるんだが、当然この M って剛体変換じゃない
よね。

頂点変換は良いとして、法線ベクトルの計算をどうしたものかと思ってるんだが、

o 法線ベクトルの算出も M を使う。
o ただし法線と M の積を求めた後で、出てきたベクトルをノルムが 1 になるよう
 に正規化する。

で良いのかね。

103 :100:02/12/26 22:09 ID:kDKABYvS
ソースをC++で打っていいのか分からなくて困ってます。

まずはVC++の使い方から調べます。

104 :名前は開発中のものです。:02/12/26 23:04 ID:hDb5j8vT
ソースはテキストエディタで討ってくダサい

105 :103:02/12/26 23:14 ID:kDKABYvS
あ、ちょっと説明が悪かったです。
VC++を立ち上げて新規作成を選んでファイルのところに
C++ソースファイル
HTMLページ
SQLスクリプトファイル
とか色々あるのでどうすれば良いのか分からなくなってます。


106 :名前は開発中のものです。:02/12/26 23:31 ID:u+QTkfIN
>>105
ヘルプに「チュートリアル」があるので、
まずはそれを一通りやってください。

107 :名前は開発中のものです。:02/12/26 23:50 ID:5pSEx7R5
本を買ってきてください。
VCの本を買えばプロジェクトの作り方から実行方法までは迷うことはないです。
その金も惜しむなら、検索エンジンで
猫でもわかるプログラミング
で検索をかけてください。

108 :名前は開発中のものです。:02/12/27 03:00 ID:8wDhiAR8
>>105
君はここじゃなくてプログラム板の初心者質問スレッドで
聞いたほうがいいよ。

109 :あぼーん:あぼーん
あぼーん

110 :105:02/12/27 10:18 ID:CvRh/hw0
ありがとうございます。
がんばります。

111 :名前は開発中のものです。:02/12/27 10:19 ID:3lURIe+n
RPGを作っているのですが、
「素人は数値や文章を打ち込む事をプログラムだと勘違いしている」
「数値や文章なんて、プログラムと切り離してエクセル等でササーっと打ち込めば済む事」
といった類の事を耳にしました。
テキストエディタのマクロを使う事くらいしか思いつかず、
どういやって切り離すのかまったくイメージ出来ません。教えてください。

あと、「そんな事はスクリプトを組んでスクリプトにやらせるべきで、逐一書くのなんて作業効率悪すぎ」
なんて事もどこかで読みましたが、ここで言うスクリプトって言うのは関数の事で合っていますか?

112 :名前は開発中のものです。:02/12/27 10:27 ID:USn1psUA
> スクリプトって言うのは関数の事で合っていますか?
いいえ。

113 :名前は開発中のものです。:02/12/27 12:00 ID:njWlRsrn
>>64
遅レスだけど、
>if ( (mx<ex+exa)&&(mx+mxa>ex)&&(my<ey+eya)&&(my+mya>ey) )
こーやったほうが処理が稼げると思ふ。。。
if( mx > ex+exa ) goto HIT_CHECK_END;
if( mx+mxa < ex ) goto HIT_CHECK_END;
if( my > ey+eya ) goto HIT_CHECK_END;
if( my+mya < ey ) goto HIT_CHECK_END;
// 当たったヨ
アボーン;
HIT_CHECK_END:
// 当たらなかったヨ
ヤレヤレ;

114 :名前は開発中のものです。:02/12/27 12:38 ID:lBLepIDx
>> 113
コンパイルかけたら同じ出力になると思う。

115 :あぼーん:あぼーん
あぼーん

116 :名前は開発中のものです。:02/12/27 14:55 ID:V5zq1+E8
>>112
即レスありがとうございます。用語辞典読んでも実感が沸かない。

スクリプト==サクラエディタで言う所のマクロだと理解していいんですか?(秀丸マクロとか)

「そんな事はスクリプトを組んでスクリプトにやらせるべきで、逐一書くのなんて作業効率悪すぎ」って言うのは、

せんし・300/150/150/50
ぶとうか・200/160/70/150
ゆうしゃ・2500/140/140/140
と打ち込んだテキストをスクリプトにかけてCの書式にする方が、
逐一ステータスをCで記述して行くよりも圧倒的に速い。って事ですか?

117 :あぼーん:あぼーん
あぼーん

118 :名前は開発中のものです。:02/12/27 19:33 ID:USn1psUA
>116
そんな感じ。

ただし実際には素の C まで落とさずに、中間言語に落として、プログラム側では
中間言語を解釈するインタプリタを用意することが多い。こうすると、パラメタやら
イベント処理を変えても再コンパイル不要になるからプログラマの手間・データを
変更してから実際に動かして試すまでのタイムラグが減る。

119 :名前は開発中のものです。:02/12/27 23:28 ID:1/oKDJhP
あんたらが 何話してんのか さっぱりだ
 オレが悲しい 年末2ちゃん
当方C++歴5年、DirectX歴1年、4月から新人プログラマ
がっくり。

120 :名前は開発中のものです。:02/12/28 01:08 ID:w/8XZg/Y
うんうん。イベントコントロール関係はスクリプトコンパイラ(独自)で
バイナリを吐いて、それを解釈しつつ実行というのが多いと思う。
UCSD PASCALみたいな感じか。

121 :あぼーん:あぼーん
あぼーん

122 :名前は開発中のものです。:02/12/28 16:40 ID:XAkUMvyT
質問させていただきます。
私は最近Cをはじめた者です。一つ疑問があります。
アプリケーションなどを開発するのと
ゲームを開発するのは、まったく同じものと考えてよろしいのでしょうか?
使用する言語が同じだとしましても、アプリとゲームを開発するのでは、
何か違いがあるのでしょうか?最近非常に悩んでおります。
専門学校などでも、アプリ開発の学科もあれば、「ゲームプログラム学科」
というのもありますし、何か違いがあるのかと思いまして質問させて
頂きました。よろしくお願いいたします。

123 :名前は開発中のものです。:02/12/28 16:55 ID:6+UzED5V
>>122
違いは無い。

124 :122:02/12/28 16:58 ID:XAkUMvyT
>>123さん
ありがとうございます!
コレで悩みが全て飛びました。
気がねなく勉強できます。ありがとうございました!!

125 :名無しは開発中:02/12/28 17:36 ID:6v0StEIP
中間言語というのはバイナリなのですよ。つまり
0102aabb...とかいう16進数なのです
プログラム中では定数をあてはめます。

#define command_1 0x01
#define command_2 0x02
.....

command_kaiseki(int no){
switch(no){
case command_1:
1の処理
     break;
case command_2:
2の処理
......
  }
}







126 :名前は開発中のものです。:02/12/28 17:45 ID:9/qiHtyl
スクリプト言語作るにあたって、
yaccやlexを使えるようにしておくと楽でいいかもね。

あと、参考スレ
http://game.2ch.net/test/read.cgi/gamedev/1005114698/


127 :名前は開発中のものです。:02/12/28 21:35 ID:a5KU/+oB
野球拳を作りたいのですが何を使えばいいと思いますか?

128 :名前は開発中のものです。:02/12/28 21:43 ID:LbjIcZ3v
登場人物には女の子を使えばいいと思うよ

129 :名前は開発中のものです。:02/12/28 22:26 ID:Q6tgt9eh
>>128
男の子もキボーン (笑)

130 :名前は開発中のものです。:02/12/28 23:56 ID:/o2fnhX+
野球拳ってどんな拳法ですか?

131 :あぼーん:あぼーん
あぼーん

132 :名前は開発中のものです。:02/12/30 13:32 ID:KFhb8kwQ
>>123
大きく人生を狂わせるような発言では?

133 :名前は開発中のものです。:02/12/30 13:48 ID:c0Wr5svx
プログラムを学校で習おうとする時点で人生が狂っている

134 :名前は開発中のものです。:02/12/30 23:20 ID:9kumBzua
プログラミングの知識がある方、興味を持たれた方、
ロックマン知らなくてもどんな人でもいいので少しでも手助けを

脳内ロックマンを作るスレ
http://choco.2ch.net/test/read.cgi/nanmin/1033731222

135 :あぼーん:あぼーん
あぼーん

136 :名前は開発中のものです。:03/01/04 14:14 ID:Oaz/Glfr
あのさ、今シューティング作ってるんだけどさ。
敵の出現場所を定義するのがすごい面倒なんですよ。

ファイルに、敵が現れる時間、場所、種類などを書いて、それを読み込ませて
るんだけど、ちょっと間に敵を追加したいと思ったら、それ以降の敵の時間を
全部ずらさなければいけなくなります。

みなさんはどんなフォーマット使っていますか?

137 :名前は開発中のものです。:03/01/04 14:18 ID:RYWMO7ZD
XMLみたいなmachine/human readableなフォーマットにして、
適切なツールを作るのが賢明じゃないかなあ。

138 :名前は開発中のものです。:03/01/04 14:19 ID:Pe6gSFnI
>>136
直前の敵との相対時間

139 :名前は開発中のものです。:03/01/04 14:36 ID:Oaz/Glfr
う〜ん。
相対時間ならそれはそれで、面倒になることはないかな…
一応やってみますか。

140 :あぼーん:あぼーん
あぼーん

141 :名前は開発中のものです。:03/01/04 14:41 ID:Siq0Vq2w
2人で戦えるゲームを作ろうと思うのですが、二人が同時にボタンを押したら同時に処理しないといけないのでしょうか?
これだとペンティアム4のハイパースレッド機能という奴を使わないといけないのでしょうか?
最近PCをX68000からWindowsXPに変えたばかりなのでよろしくお願いします。


142 :あぼーん:あぼーん
あぼーん

143 :名前は開発中のものです。:03/01/04 14:59 ID:RYWMO7ZD
>>141
mainloop()
{
 一人目のキー処理();
 二人目のキー処理();
 時間を進める();
 描画();
}

>PCをX68000からWindowsXPに変えたばかり

ナントカ山口に騙されてたクチか?

144 :名前は開発中のものです。:03/01/04 15:02 ID:HHCJx2gu
>>141
まぁマルチスレッドで処理するという手もあるが、見たところゲーム製作は
初心者(失礼)っぽいので、擬似タスクから勉強したほうが良いと思うよ。

参考URL
http://www.hh.iij4u.or.jp/~peto/Games/games_top.html


145 :あぼーん:あぼーん
あぼーん

146 :名前は開発中のものです。:03/01/04 19:09 ID:b7FiLgbb
>>144
キー入力の処理とそれとは、まったく関係ないが…

147 :名前は開発中のものです。:03/01/04 19:19 ID:b7FiLgbb
>>136
手を抜きたければ配列ってのもあり。

static unsigned int enemys[] = {
1, 0, 0, 0, 0, 0, 1, // 0 frame目
0, 0, 0, 1, 0, 0, 2, // 60 frame目
0, 0, 0, 0, 0, 0, 2, // 120 frame目
..
};

1 行 60 frame 単位で処理して、出現座標の x 座標に対応したところに
敵出現情報を埋めておく。0 で敵なし, 1, 2, 3, .. が敵の種類とかさ。

少し凝った処理が必要(たとえば 30frame で出したい)とかになったら、
上位 24bit をパラメタとして敵出現関数に渡して、そっちで細かい処理
をさせる。

148 :名前は開発中のものです。:03/01/04 19:25 ID:Sa70MEqM
>>146
キー入力とは関係ないが、
> これだとペンティアム4のハイパースレッド機能という奴を使わないといけないのでしょうか?
こんなことを言ってる様だと、擬似タスクの勉強からはじめろって言いたくなる
気持ちもわかるだろ。
それじゃあーハイパースレッド機能のないX68000では二人用のゲームは
作れないのか?と問いたくなるけど(w

>>141 はキー入力のことは一旦置いといて、ゲーム制作の基本中の基本を
解説しているサイトを検索して読み漁った方がいいかと思うけどね。


149 :あぼーん:あぼーん
あぼーん

150 :名前は開発中のものです。:03/01/04 20:57 ID:iAU/RP0w
そこで疑似タスクなんてチンケな物出してくる君の実力もそこまで。
ゲームのメインループとキー入力の関係を教えた方が百倍為になる。

151 :名前は開発中のものです。:03/01/04 21:19 ID:tSU5Xw8/
入出力は、本気で考えると意外と深いぞ。

昔のようなハードウェアを 1 つのプログラムで占有できる環境なら
ポーリングさせれば良いんだが、今時の環境についてマジに理解しよ
うとすると、割り込みと OS 側の処理に関する知識が必須になる。

とりあえず「DirectInput では現在のキー入力状態を取得する API
が提供されてるから、それを使えば良い」ぐらいの理解で済ませてお
いて、細かい話は必要になるまで忘れといた方が幸せじゃないかね。

>>141 にちょい追加だが
mainloop()
{
 キーボード入力状態のスナップショットを取得(); // 細かいことは Win32 にお任せ
 一人目のキー処理();
 二人目のキー処理();
 時間を進める();
 描画();
}

152 :名前は開発中のものです。:03/01/04 21:31 ID:mQYZkk6z
俺は151みたいなのが嫌いです。

153 :148:03/01/04 21:41 ID:Sa70MEqM
>>150
> ゲームのメインループとキー入力の関係を教えた方が百倍為になる。
ハァ?何それ?・・・って感じですがなにか?

>>151
141のレベルを推測するとそこまで考える必要は全然ないと思われ。
そんなのは逆に知識ひけらかせてるだけにしか見えないが。

そもそも質問にマジレスするとなると、まずほとんどの二人用ゲームで
「同時に処理する必要はないし、厳密にはできない」だな。もちろんこれだけで
141がきちんと理解できるのか疑問だけど、それ以上のことは141自身が
言ってないので答えようがないな。

154 :名前は開発中のものです。:03/01/04 21:59 ID:tSU5Xw8/
> 「同時に処理する必要はないし、厳密にはできない」
そもそも「同時」ってのが何を指してるのか考えないといかんよな。

>>141
現実世界だと時間は連続して流れてるわけだが、ゲームではふつー 1/60 秒なり
何なりの適当な間隔でゲームを進行させる。だから、入力を処理するのも「押し
たらすぐ」ではなくて、押したらそれを覚えておいて、次のゲーム進行のタイミ
ングで処理すれば良い。

…ってのがすべての基本かね。

155 :名前は開発中のものです。:03/01/04 23:09 ID:UD5seDi4
俺みたいなヘタレ高校生がゲーム製作で食っていけるように
なるにはどうしたらいいんだ!?
人生の先輩達よどうか教えておくれ・・・

156 :名前は開発中のものです。:03/01/04 23:20 ID:9YV/5Oa6
>>155
マジレスすると、ゲーム以外のことを沢山勉強すべし。

157 :名前は開発中のものです。:03/01/05 01:16 ID:BX37WwrG
プログラマになりたいなら、プログラミングはやっといた方が良いけど。
あと数学と物理と英語。

158 :名前は開発中のものです。:03/01/05 02:04 ID:Y2P5Wwxz
>>155
ゲーム制作をさせてくれる会社に入りましょう

159 :141:03/01/05 03:22 ID:GM2t1dvX
んま!こんなに馬鹿が釣れましたわ!

160 :あぼーん:あぼーん
あぼーん

161 :名前は開発中のものです。:03/01/05 07:23 ID:cPL0Ma17
>>155
プログラマになりたいなら、大学までプログラムは放って置いて
高校までに英語をネエティブ並みに話せる、書ける、読めるようになっておきたい。

俺が。

162 :名前は開発中のものです。:03/01/05 20:39 ID:XJftI3rc
>>161
俺漏れも

163 :名前は開発中のものです。:03/01/05 21:51 ID:+ZilYbBV
英語はプラスアルファに過ぎんから、本業のプログラミングできんと話に
ならんぞ。まぁ、英語も読むぐらいはできないと困るが。

164 :名前は開発中のものです。:03/01/17 11:54 ID:zxXu494p
     ∧_∧
    ( ´∀`)< 糸冬 !!
    /,   つ
  ( ((_(_, )) )
     しし'


165 :名前は開発中のものです。:03/01/23 12:30 ID:B/UbhrUo
age

42 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)