数学をとらなかった人の為の3D数学 その7:微分と積分

微分積分アルゴリズムを考える上で必要な考え方です。
画像操作や圧縮、物理計算など、色々応用できるので使えるようにしておくと便利です。
(編集中)

微分

・変化量(射影)
・等加速度運動
・円の接線(接点の変化量(傾き))
(編集中)

積分

(編集中)

3Dで格闘ゲームを作る話 その1

近況報告のような感じです。
ここのところC#+XNAでゲーム作ってたり、Objective-C+iPhone/iPadでアプリ作ったり、なかなか暇にならないこの頃です。
が、これに追加して3D格闘ゲームを作ることになりました。


2月頭から始めて、期限は2月21日です。3週間です。
今のところ、
2月1日〜2月3日 →モーションエディタ作成
2月4日〜2月8日 →モーション作成(技とかで順次増えるので基本的なモーションのみ)
2月9日〜      →ゲーム本体のプログラミング開始


今のところ順調ですがいつ詰まるか・・。
早い段階でモーションを用意できたので(というよりすぐに用意できるよう3Dモデルにしたんですが^^;)
作業的には予定より少し楽なんですが・・、あと1.5週間の間にこれ+エントリーシートというものを2、3枚用意しないといけなくて。
なかなか大変です。


初めて格闘ゲームにチャレンジするのですが、プログラミングに関してはアクションゲームとか作るよりも断然楽ですね。
何しろ地面は平らだし、管理するキャラは2体(作るのは1体)なので複雑なオブジェクトマネージャを用意しなくていいし。
その分タイミング・バランスの調整、エフェクト・演出が大変ですが、そこは余った時間分でbetterに仕上げる感じですね。


新しいボーンアニメーション構造とか作る暇なかったので、以前ご紹介した(↓の)を使ってるんですが、なかなかいい感じです。
モーションエディタ作る時も特に困らなかったし(スクリプト型にしました)、ゲーム本体の場合も各関節の位置が直接分かるので、当たり判定作るのがものすごく楽なんです。
ボーンクラスが保持してるのは根元だけなんですが、それにそのボーンの回転行列を掛けたオフセットをかますだけでそのパーツの線分ができます。
後はそれと相手全体、もしくは各パーツと判定とってやれば良いだけです。


モーションエディタも汎用的にできたら、公開したいと思ってます。
3Dモデル・モーションの知識が無くともプログラマブルスクリプト)にモーションを作成できるので、3Dゲームを作りたいけどモーション無くて足踏みしてる方にぜひ使って頂きたい。

その6(ご質問スレッド)

ご質問をいただいたのでそのお返事をヽ(・ω・)ノ

> 1.audio_io.cpp内でwfx.nSamplesPerSecの値を44.1[kHz]もしくは22.1[kHz]としていますが、
> なぜ44.1[kHz]ではないのでしょうか?

skypeやラジオ、電話では確か11,025[Hz]が使われています。CD音質は44,100[Hz]です。


音質を下げる意味は、データ量の軽減です。
44,100[Hz]では、44100*2(16bit)*2(stereo)で172kb/sの帯域が必要になります。
実際には相互通信ですから、単純計算でも344kb/sの通信を常にする事になります。


そこで周波数を22,050[Hz]、ビットレートを8bitと半分にすると86kb/sと、なんとデータ量が4分の1になるのです。
実際は圧縮しますから、データ量は更に小さくなります。
今回のボイスチャットでは音楽のストリーミング再生を実装したかったので、高音質モード(44,100[Hz])を用意しました。


データ量に関する解説は音声チャットを作る話その3にもありますので、ご覧になってください。



> 2.audio_io.cpp内の処理はある程度読み進めて分かったのですが、
> マイクから受け取った音声の処理がどこで行われているのかが分かりません。
> また、そのデータがどの変数に保存されているのかも分かりませんでした。

waveIn系APIが、登録したバッファに登録した順に書き込んでくれています。
各バッファが満タンになるとその都度通知が来るので、それを読み出して符号化して送信しています。
APIの説明は音声チャットを作る話その2にありますので、MSDNライブラリと併せてご覧になってください。


*通知はAudioIO::waveInProcがコールバック関数として呼ばれます。




> 3.私は通信接続方法に関して全く知識が無いので参考にしたサイトを教えていただけないでしょうか?

UDP通信に関するご質問ということでしょうかヽ(・ω・)ノ?


UDPはかなり単純でして、相手のポートめがけてパケットを送信するだけです。
届かなかったり受信されなければパケットは破棄されます。
ぐぐってみた所、下記のサイトが分かりやすいと思いました。


ボイスチャットの…ということでしたら、参考にしたサイトはありません。
というより、公開してる人を見たことがなかったので今回公開してみましたヽ(・ω・*)ノ



68user's page
http://x68000.q-e-d.net/~68user/net/

geekなぺーじ
http://www.geekpage.jp/programming/linux-network/udp.php


ご参考になりましたでしょうかヽ(・ω・)ノ?

数学をとらなかった人の為の3D数学 その6:衝突判定

衝突判定とは

当たり判定とも(光線や線分なら交差判定とも)呼ばれる。

・複雑な形状と近似
・2D限定ならば特化した判定
(編集中)

2D衝突判定

矩形、円、テーブル
(編集中)

球と球

基本的には円と(編集中)

AABBとAABB

AABBとは Axis-Aligned Bounding Box(軸並行境界ボックス)、XYZ基本軸に対して全ての辺が平行または垂直な直方体のことである。
(編集中)

OBBとOBB

OBBとは Oriented Bouding Box(有向境界ボックス)、回転した直方体のことである。
まず、回転した直方体同士では衝突判定をとることが(現実的なオーダーでは)できない。
そこで、序章で書いた近似を応用して、AABBと(編集中)

ツイート

現在GDKライブラリを使って3DSTG(正確には違うけれど)を書いてます。
最初に作ったルービックキューブとかのソースコードも一緒にここで公開する予定ですo(`д´*)oイラナイ?

                                                                                                                        • -

濃ゆい話は続き記法にしましたヽ(`ω´*)ノ

                                                                                                                        • -

OBB同士の衝突判定を作っています。


完成。

                                                                                                                        • -

Xファイル含む全てのポリゴンをくっつけられる、ボーンアニメーションクラスを作ってます。
頭だけXファイルモデリングして、体は直方体を組み合わせてテクスチャ貼って、みたいな感じで手軽に作れます。
各ポリゴンがボーンそのもので、それぞれの回転は独立しているので、モーション作成も難しくない。気がする。
意外と使えるライブラリになるかもヽ(・ω・)ノ?


完成。モーション間の補間もばっちりです。

                                                                                                                        • -

上記のボーンアニメーションでは困ることも。
例えば、モデルが既に用意されてあって、それにモーションをつける場合。
何しろパーツごとに分割しないといけない。


それを考えると別のボーンアニメーションクラスを考えたい。
…ん、パーツを分けなくても、ローカル空間上で頂点をグループ分けしたらよくね?
これはさすがにソースコード上で把握するのは不可能なので、頂点をグループ化するツールを作ろう。


こうすると毎フレーム頂点バッファをロックして書き換える(モーションする)ことになるけど大丈夫かいな?
でも描画は1セットで良くなるし、速度的にはトントンなのか?
実装してみて無理そうだったらまた考えようずヽ(・ω・)ノ

                                                                                                                        • -

現在C#+XNAのGDKを製作中ですo(`∀´*)o