Hatena::ブログ(Diary)

nepoの困った日記帳 - とりあえず今年はNW

2020-01-01 本のレビューコーナー

本のレビューコーナー 本のレビューコーナーを含むブックマーク 本のレビューコーナーのブックマークコメント

備忘録も兼ねて、本を紹介していきます。

こちらのレビューはほぼ主観で書いてますので、リンク先のAmazonレビューと比較してみると面白いかもしれません(*`ω´)

(クリックでアフィリエイトとかは特に発生しません(´ω`)。)

08

Microsoft XNAガイドブック [XNA ゲームプログラミングの基礎] Microsoft Xna Game Studio Express Creator's Guide

XNAの、というよりXNAを使ってゲームプログラミングの基礎(ベクトル、行列、衝突判定)を学べる本です。

カスタムコンテンツパイプラインの章でQuakeIIのモデルフォーマット(md2)を用いているのが面白かったです。


Squirrelゲームプログラミング 組み込みスクリプト言語による実践テクニック

その名の通り、実際に業務でも使用されたスクリプト言語Squirrel(スクワール)のリファレンス本です。

Squirrelについて知りたい方にはもちろん、JNI(JavaC++)のような、異なるプログラミング言語間で動的に関数変数をやり取りするシステムを作りたい人にもオススメできる本です。

07

Windows Azure Platform開発入門 (MSDNプログラミングシリーズ)

章が進むごとに少しずつ前章にかぶせてるので、すらっと読めます。

サンプルコードによる説明が多めで、Azure入門に良いです。


Microsoftのクラウドコンピューティング Windows Azure入門

Azureがどんな技術か詳しく解説されています。

どういうサービスで活用、運用できるかを考える本です。


Windows Azureアプリケーション開発入門 (MSDNプログラミングシリーズ)

例題から使える機能を学んでいくようになっています。

細かく章分けされているので、必要な部分のみピックアップして読むことも出来ます。


Windows Azure APIリファレンス (MSDNプログラミングシリーズ)

その名の通り、APIリファレンスとして手元にあると便利です。



プログラミングWindows Phone (MSDNプログラミングシリーズ)

前半はUISilverlight+Expression Blend+.NETで実装、後半はXNAを使ったグラフィック描画です。

環境構築から分かりやすく、これ一冊で作れます。

用途に応じて、SilverlightXNAのみの本を別途用意すると良いと思います。オススメです。

.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン (Microsoft.net Development Series)

タイトルがあれなんですが、.NETの説明本ではありません!

ライブラリフレームワークを設計する上で大事なことを、各々4つの評価(Do, Consider, Avoid, Do not)で解説されています。

さらに、それに対して.NET Framework開発者の方々のそれぞれの視点での意見も書かれてあり、かなりオススメです。

JNI:Java Native Interfaceプログラミング―C/C++コードを用いたJavaアプリケーション開発 (Java books)

AndroidSDK+NDKによる開発についての本です。

JavaC/C++の連携(JavaクラスのメソッドプロパティC++側で導出する)が分かりやすく解説されています。オススメです。

内部は.NET的な実装になっているようですね。

入門Haskell―はじめて学ぶ関数型言語

Haskellとは何か。何をする為のものなのか。

きっとプログラマーは読むだけでレベルアップを実感するはず。


プログラミングHaskell

こちらの本の特長は、ソースコードが元の記号で書かれていることです。

数学が好きな方にはこちらがオススメです。


詳解OSPF (Network Technology Series)

OSPFは勿論の事、RIPやBGPといった様々なルーティングプロトコルについて学べます。

IPv6やCIDR等にも言及しているので、ネットワークスペシャリスト試験合格を目指す方にもオススメです。


05

オンラインゲームを支える技術  −−壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)

ソケットプログラミングネットワークプログラムの設計、オンラインゲームの開発、運営などを丁寧に解説されています。

筆者の経験から具体的な数値つきで書かれており、貴重です。

MMOに限らず、FPS格闘ゲーム等のネットワーク対戦についても書かれており、ゲームプログラマにオススメです。

プログラミングのための線形代数

3Dに必要な数学をただの計算式として覚えた人が読むと、とても面白い本です。

ベクトル・行列等の数学的な見方、意味をかなり工夫して解説されています。

後半は別の参考書片手に読むとよいかも。かなり読み応えがあります。

UPnP入門

EthernetIPTCPHTTPと、プロトコルネットワーク下層から順番に解説されているので、ネットワークプログラミングを知らない方でも読めそうです。

UPnPの日本語仕様書として使えると思います。


02

リアルな動きのための ゲーム物理プログラミング

様々な物理エンジンの紹介と導入(C#+XNA)、そして物理エンジンを使うための物理を勉強できる本です。

数III、数C程度の前提知識は必要かもしれません。


ゲームプログラミングのための数学と物理

ゲームプログラミングに必要な数学代数学微積分学など)や物理(剛体、流体、摩擦など)、アルゴリズム(衝突判定など)を大量に学べます。(分厚い)

欲しい知識だけ選んでいく勉強方法もアリです。専門学校の教科書にしたい本で、オススメです。


ゲームデザイナーのためのリアルタイムカメラ

3Dゲームにおけるカメラワークについて、理論として書かれています。

タイトルの通り、ゲームデザインをするプログラマープランナー向けの本です。(プログラムが分からなくても読めるようになってます)


CUDA高速GPUプログラミング入門

CUDA(GPGPU)の紹介と、アルゴリズムの並列化を考える本です。

GPGPUとは直接関係ない部分ですが、ソートの高速化のヒントを得られました。


実例で学ぶゲームAIプログラミング

キャラクターAIの実装について解説されています。

内容は主に、「行動選択」と「動き(経路探索)」についてです。


ゲーム開発者のためのAI入門

著者は違いますが、上記の実例で学ぶゲームAIプログラミングを発展させた内容になっています。

特に、「動き(経路探索)」の部分を掘り下げて書いてあります。

A*アルゴリズムが図入りで分かりやすく解説されています。オススメです。

ゲームプログラミングのための行動AI数学

こちらも著者は違いますが、上記の実例で学ぶゲームAIプログラミングを発展させた内容になっています。

特に、「行動選択」の部分を掘り下げて書いてあります。

確率統計ガウス分布ポアソン分布など数学モデルをAIに組み合わせるものです。読み応えあります。


2011


2010

実例で学ぶゲーム3D数学

3Dプログラミングに必要な数学ベクトル、同次座標、行列、四元数)や知識を分かりやすく学べます。オススメです。

中の練習問題の解答は筆者サイトにて配布。

正誤表に私から指摘させていただいた部分があったりします(`ω´)

2019-01-01 GDKライブラリ

2017-01-07 Visual Studio と Luaスクリプト

Visual StudioLuaスクリプト Visual Studio と Luaスクリプトを含むブックマーク Visual Studio と Luaスクリプトのブックマークコメント

仕事でC++組み込みLuaスクリプトを書くことが多くなったので、自作エディタを拡張してLuaに対応して使っていました。

しかしC++ソースコードと同時作業が多いので、やはりVisual Studio上で編集したい。

バージョン管理など様々なVSプラグインの恩恵も受けたいです。


ところで、Luaでもシンタックスハイライトやコード補完など便利な機能が欲しいものです。

探してみたところ、下記のプラグイン2点が見つかりました。

現在は「VisualStudio拡張機能」という形で提供されているので導入は容易です。


(1) Visual Studio Extention for Lua

https://marketplace.visualstudio.com/items?itemName=VisualCPPTeam.VisualStudioExtensionforLua

(2) BabeLua

https://babelua.codeplex.com/


(1)はMicrosoft製。シンタックスハイライト+コード補完+オートインデント

(2)はMITライセンスOSSシンタックスハイライトビルドサポートがあるようです。

どちらも試してみたところ、(1)は少し問題があり、ファイルが数千行になると作業が難しいレベルで重くなります。

(2)は行数による問題はなさそうなので、BabeLua、こちらを導入してみます。

OSSなのでカスタマイズも出来て良いですね。

2016-01-01 GDKライブラリ(跡地) このエントリーを含むブックマーク このエントリーのブックマークコメント

2013-01-02 Windows8 プログラミング

[][] Windows8 プログラミング その2 new!  Windows8 プログラミング その2 new!を含むブックマーク  Windows8 プログラミング その2 new!のブックマークコメント

タッチパネルに対応したアプリケーションを作成する


前回の結論として、Windows8上で動作するタッチパネル対応アプリケーションは簡単に作成できるようです。

ウィンドウプロシージャを以下のように編集します。



HRESULT WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch(msg) {
    case WM_CREATE:
        ...
        break;

    case WM_PAINT:
        ...
        break;

    case WM_LBUTTONDOWN:
        ...
        break;

    case 0x246:// タッチ入力の開始
        POINT pt;
        pt.x = (short)LOWORD(lParam);
        pt.y = (short)HIWORD(lParam);
        ::ScreenToClient(hWnd, &pt);    // スクリーン座標で格納されています

        ...

        break;

    case 0x245:// タッチ入力中(静止状態、移動状態問わず)
        ...
        break;

    case 0x247:// タッチ入力の終了
        ...
        break;
    }
}


基本的にはこれまでのWindowsと完全互換性があり、タッチに対応するウィンドウメッセージの処理を加えるだけで、Windows8デスクトップアプリケーションは作成できるようです。

タッチ対応のWindowsアプリケーションとか夢が広がりますね!


#追記

Microsoft様よりいただいたArrows Windows8タブレットで試したのですがめっちゃ反応が良いです。

ドラム譜面作成ツールを作ってみたところ遅延も感じられず。

ご参考までに。

2013-01-01 Windows8 プログラミング

[][] Windows8 プログラミング  Windows8 プログラミングを含むブックマーク  Windows8 プログラミングのブックマークコメント

久しぶりの更新となります。

今回はWindows8タッチパネルを使ったデスクトップアプリケーションを作成する際のメモです。

とりあえず雑記となります。


タッチパネルマウス

Windows8では既存のGUIアプリケーションタッチパネルで扱えるように、OSによるタッチ→マウスの入力変換が行われています。

GetAsyncKey等のWindows APIとウィンドウメッセージで確認できます。

ウィンドウメッセージだと単にタッチするとマウスの左ボタン、1秒程度長押しすることで右ボタンとなります。

DirectInputは物理的なマウス入力の検出となるのでこちらではサポートされません。


タッチパネルマウス その2

GetAsyncKeyの場合、単にタッチDown、タッチUpとマウスボタンのDown、Upが関連付けられる訳ではありません。

具体的には以下のような変換が行われます。


タッチ1回目Down:無し

タッチ1回目Up:WM_LBUTTONDOWN, WM_LBUTTONUP

タッチ2回目Down:WM_LBUTTONDOWN

タッチ2回目Up:WM_LBUTTONUP


スワイプの度にWM_LBUTTONDOWNが送られないように工夫されているようです。

がちょっとクセがありますね。


タッチにより送出されるウィンドウメッセージ

Windows8より新しくタッチ入力に関連するウィンドウメッセージが追加されています。

インストールできる人はWindows8 SDKの中のWindows.hの中見てください。

Spy++を放り込んで観察してみました。


メッセージと大体の解釈
MsgIDDescriptionwParamlParam
0x249Touch inFingerIDスクリーン座標
0x246Touch beganFingerIDスクリーン座標
0x245Touch stationary/MovingFingerIDスクリーン座標
0x247Touch endFingerIDスクリーン座標
0x24ATouch outFingerIDスクリーン座標

タッチしている間、常に0x245が送出されます。

座標はマウス入力と同じくLOWORDとHIWORDに格納されています。

 

2011-12-29 Android NDK入門

[][] Android NDK入門 その1  Android NDK入門 その1を含むブックマーク  Android NDK入門 その1のブックマークコメント

最初に、Android NDK+Eclipseビルド環境を構築します。

(編集中)

2011-12-28 XNA4.0入門

[][] XNA4.0入門 その1  XNA4.0入門 その1を含むブックマーク  XNA4.0入門 その1のブックマークコメント

(編集中)

2011-12-27 3Dモデリングツールを作る話

2011-04-24 数学をとらなかった人の為の3D数学

[][][]数学をとらなかった人の為の3D数学 その8:四元数(Quaternion) 数学をとらなかった人の為の3D数学 その8:四元数(Quaternion)を含むブックマーク 数学をとらなかった人の為の3D数学 その8:四元数(Quaternion)のブックマークコメント

四元数とは

(編集中)


極形式極座標

x^3=1を解くと(編集中)


四元数による回転表現

(編集中)

2011-03-09 数学をとらなかった人の為の3D数学

[][][]数学をとらなかった人の為の3D数学 その7:微分積分 数学をとらなかった人の為の3D数学 その7:微分と積分を含むブックマーク 数学をとらなかった人の為の3D数学 その7:微分と積分のブックマークコメント

微分積分アルゴリズムを考える上で必要な考え方です。

画像操作や圧縮、物理計算など、色々応用できるので使えるようにしておくと便利です。

(編集中)


微分

・変化量(射影)

・等加速度運動

・円の接線(接点の変化量(傾き))

(編集中)


積分

(編集中)

2011-02-10 3Dで格闘ゲームを作る話

[][]3Dで格闘ゲームを作る話 その1 3Dで格闘ゲームを作る話 その1を含むブックマーク 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ゲームを作りたいけどモーション無くて足踏みしてる方にぜひ使って頂きたい。

2010-10-22 音声チャットを作る話

[][]その6(ご質問スレッドその6(ご質問スレッド)を含むブックマーク その6(ご質問スレッド)のブックマークコメント

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


> 1.audio_io.cpp内でwfx.nSamplesPerSecの値を44.1[kHz]もしくは22.1[kHz]としていますが、
> なぜ44.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


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

キューパチキューパチ 2011/09/06 19:27 私もこの記事のソースコードを参考にしながら音声チャットを作ってみたいのですがダウンロードがすでに出来なくなっています。つきましてはメールやホームページなどで添付や再掲載をしていただけないでしょうか。

2010-08-13 数学をとらなかった人の為の3D数学

[][][]数学をとらなかった人の為の3D数学 その6:衝突判定 数学をとらなかった人の為の3D数学 その6:衝突判定を含むブックマーク 数学をとらなかった人の為の3D数学 その6:衝突判定のブックマークコメント

衝突判定とは

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

・複雑な形状と近似

・2D限定ならば特化した判定

(編集中)


2D衝突判定

矩形、円、テーブル

(編集中)


球と球

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


AABBとAABB

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

(編集中)


OBBとOBB

OBBとは Oriented Bouding Box(有向境界ボックス)、回転した直方体のことである。

まず、回転した直方体同士では衝突判定をとることが(現実的なオーダーでは)できない。

そこで、序章で書いた近似を応用して、AABBと(編集中)

2010-08-10 ツイート このエントリーを含むブックマーク このエントリーのブックマークコメント

現在GDKライブラリを使って3DSTG(正確には違うけれど)を書いてます。

最初に作ったルービックキューブとかのソースコードも一緒にここで公開する予定ですo(`д´*)oイラナイ?

-------------------------------------------------------------

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

-------------------------------------------------------------

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


完成。

-------------------------------------------------------------

Xファイル含む全てのポリゴンをくっつけられる、ボーンアニメーションクラスを作ってます。

頭だけXファイルモデリングして、体は直方体を組み合わせてテクスチャ貼って、みたいな感じで手軽に作れます。

ポリゴンがボーンそのもので、それぞれの回転は独立しているので、モーション作成も難しくない。気がする。

意外と使えるライブラリになるかもヽ(・ω・)ノ?


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


-------------------------------------------------------------

上記のボーンアニメーションでは困ることも。

例えば、モデルが既に用意されてあって、それにモーションをつける場合。

何しろパーツごとに分割しないといけない。


それを考えると別のボーンアニメーションクラスを考えたい。

…ん、パーツを分けなくても、ローカル空間上で頂点をグループ分けしたらよくね?

これはさすがにソースコード上で把握するのは不可能なので、頂点をグループ化するツールを作ろう。


こうすると毎フレーム頂点バッファをロックして書き換える(モーションする)ことになるけど大丈夫かいな?

でも描画は1セットで良くなるし、速度的にはトントンなのか?

実装してみて無理そうだったらまた考えようずヽ(・ω・)ノ


-------------------------------------------------------------

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