本のレビューコーナー

備忘録も兼ねて、本を紹介していきます。
こちらのレビューはほぼ主観で書いてますので、リンク先の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プログラミングシリーズ)

前半はUIをSilverlight+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入門

Ethernet、IP、TCP、HTTPと、プロトコルをネットワーク下層から順番に解説されているので、ネットワークプログラミングを知らない方でも読めそうです。
UPnPの日本語仕様書として使えると思います。

02

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

様々な物理エンジンの紹介と導入(C#+XNA)、そして物理エンジンを使うための物理を勉強できる本です。
数III、数C程度の前提知識は必要かもしれません。


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

ゲームプログラミングに必要な数学(代数学微積分学など)や物理(剛体、流体、摩擦など)、アルゴリズム(衝突判定など)を大量に学べます。(分厚い)
欲しい知識だけ選んでいく勉強方法もアリです。専門学校の教科書にしたい本で、オススメです。


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

3Dゲームにおけるカメラワークについて、理論として書かれています。
タイトルの通り、ゲームデザインをするプログラマー、プランナー向けの本です。(プログラムが分からなくても読めるようになってます)


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

CUDA(GPGPU)の紹介と、アルゴリズムの並列化を考える本です。
GPGPUとは直接関係ない部分ですが、ソートの高速化のヒントを得られました。


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

キャラクターAIの実装について解説されています。
内容は主に、「行動選択」と「動き(経路探索)」についてです。


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

著者は違いますが、上記の実例で学ぶゲームAIプログラミングを発展させた内容になっています。
特に、「動き(経路探索)」の部分を掘り下げて書いてあります。
A*アルゴリズムが図入りで分かりやすく解説されています。オススメです。

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

こちらも著者は違いますが、上記の実例で学ぶゲームAIプログラミングを発展させた内容になっています。
特に、「行動選択」の部分を掘り下げて書いてあります。
確率統計。ガウス分布ポアソン分布など数学モデルをAIに組み合わせるものです。読み応えあります。

2011

2010

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

3Dプログラミングに必要な数学(ベクトル、同次座標、行列、四元数)や知識を分かりやすく学べます。オススメです。
中の練習問題の解答は筆者サイトにて配布。
正誤表に私から指摘させていただいた部分があったりします(`ω´)

GDKライブラリ

GDKライブラリとは、ここで公開しているソースコードをビルドするのに必要なC++ライブラリです。
2D、3D描画エンジン(DirectX9.0c以降)、キー入力、サウンド、ネットワーク、スレッドや各種Windowsコントロールまで簡単に使えます。


現在は3D描画エンジンを中心に開発しています。
・3Dオブジェクトのアルファブレンド(抜き色有り無し+半透明、加算)を2D感覚で!
・外部ツールを使わずにボーンを使ったモーションを作成できる!
・その他、数学クラス(Vector2,Vector3,Matrix,Quaternion)も充実!
単純なサンプルコード

・GDKライブラリ 2010/07/24 Released
修正中


サンプル:mp3デコーダ、IPホスト名変換、再生位置記憶動画プレイヤー、プログラミングエディタ
# 付属のサンプルソーステキストエディタ以外はかなり手抜きコーディングです、すみません。


上手くビルドできない場合はメールやコメント欄にどうぞo(`ω´*)o


# 2016/03/24
# 本当に2016年になってしまったので2019/01/01に延長しました。時間が経つのは早いものですね。
# 現在もNepoGDKはツール開発で大活躍中です。初期バージョンから数えるとそろそろ15年(!)経つので書き直したい気持ちがあったりします。

Visual Studio と Luaスクリプト

仕事でC++組み込みLuaスクリプトを書くことが多くなったので、自作エディタを拡張してLuaに対応して使っていました。
しかしC++ソースコードと同時作業が多いので、やはりVisual Studio上で編集したい。
バージョン管理など様々なVSプラグインの恩恵も受けたいです。


ところで、Luaでもシンタックスハイライトやコード補完など便利な機能が欲しいものです。
探してみたところ、下記のプラグイン2点が見つかりました。
現在は「VisualStudio拡張機能」という形で提供されているので導入は容易です。

(2) BabeLua

https://babelua.codeplex.com/


(1)はMicrosoft製。シンタックスハイライト+コード補完+オートインデント、
(2)はMITライセンスのOSSシンタックスハイライト+ビルドサポートがあるようです。

どちらも試してみたところ、(1)は少し問題があり、ファイルが数千行になると作業が難しいレベルで重くなります。
(2)は行数による問題はなさそうなので、BabeLua、こちらを導入してみます。
OSSなのでカスタマイズも出来て良いですね。

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タブレットで試したのですがめっちゃ反応が良いです。

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

ご参考までに。

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++を放り込んで観察してみました。

メッセージと大体の解釈
MsgID Description wParam lParam
0x249 Touch in FingerID スクリーン座標
0x246 Touch began FingerID スクリーン座標
0x245 Touch stationary/Moving FingerID スクリーン座標
0x247 Touch end FingerID スクリーン座標
0x24A Touch out FingerID スクリーン座標


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

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