2009-01-01から1年間の記事一覧

乱数ジェネレータの実装。その1-EngineとDistribution-

C++

boostのvariate_generatorを思い出したので、適当に実装してみます。 C++0xでは使えないそうです。 参考サイト Boost Random Number Library Variate Generator - 1.41.0 letsboost::random 本の虫: C++0xの新しい乱数ライブラリ、random Mersenne Twisterを…

乱数の話。

最近友人とFF13のオプティマの話をしていて、 「オプティマって全部で何種類ある?」とか「組合せ」とか「順列」の話から乱数の話になった。 友人「ファイアーエンブレムみたいなパラメータの成長率はどう実装する?」 私 「レベルアップ時にHPが80%で1アッ…

XAudio2を使ってみる。その5-スレッドによるポーリング-

ようやくthreadクラスが出来たので、以前(XAudio2を使ってみる。その4-ストリーミング再生- - while( c++ );)のストリーミング再生と組み合わせて、まずはポーリングスレッドを作ってみましょう。 auto_reset_event end( false ); //ポーリングスレッド終…

threadクラスの実装。その3-eventクラス-

condition variableのほうが一般的でしょうか? とりあえずwindowsなので、イベントのラッパーを作ってみます。 eventクラス #include <windows.h> class event { typedef HANDLE handle_t; public: event( bool manual_reset, bool init_state ) { handle = CreateEven</windows.h>…

threadクラスの実装。その2-intrusive_ptrを使う-

出来るだけdeleteは書きたくないので、前回実装したintrusive_ptrを使って修正します。 修正する項目は thread_data_baseクラスのデストラクタをprotectedにする thread_data_baseクラスに参照カウンタを追加。 thread_data_baseクラスにintrusive_ptr_add_r…

intrusive_ptrの実装。

C++

最近、個人的にはshared_ptrより使用頻度の高いintrusive_ptrを実装してみます。参照先のオブジェクト側で参照カウンタを管理するスマートポインタですね。 intrusive_ptrが実体化、コピーされるときにintrusive_ptr_add_ref(T*)、破棄されるときにintrusive…

threadクラスの実装。その1

XAudio2のイベント通知のためにthreadクラスが必要になったので、テンプレートを使って実装してみたいと思います。ただし、pthreadは使ったことがないので、windowsのみの実装になります。 参考サイト Boost.Threads 前回雑記で書いたthreadクラスの実装を晒…

XAudio2を使ってみる。まとめ

XAudio2のまとめ XAudio2を使ってみる。その1-初期化- - while( c++ ); XAudio2を使ってみる。その2-音の再生- - while( c++ ); XAudio2を使ってみる。その3-WAVファイルの再生- - while( c++ ); XAudio2を使ってみる。その4-ストリーミング再生- - whil…

XAudio2を使ってみる。その4-ストリーミング再生-

ゲームなどのBGMでWAVファイルを使用する場合、数十Mバイトのバッファを用意するのは現実的ではないので、数秒程度のバッファを使って少しずつ再生していきます。まずはイベント通知型ではなく、ポーリング型で実装してみたいと思います。 解説 SubmitSource…

XAudio2を使ってみる。その3-WAVファイルの再生-

XAudio2で音を再生する場合、音データを格納したバッファと音源となるSourceVoiceが必要になります。 // // SourceVoiceの作成 // if( FAILED( xaudio->CreateSourceVoice( &source_voice, WAVEフォーマット ) ) ) throw "CreateSourceVoice"; // // SourceV…

XAudio2を使ってみる。その1-初期化-

WindowsVista以降、DirectSound3Dを使ってハードウェア的に3Dオーディオエフェクトをかけることはできません。DirectSound - Wikipediaクロスプラットフォーム(WindowsとXbox)で共通に使える低レベルオーディオAPIである「Xaudio2」に置き換えられるそうです…

XAudio2を使ってみる。その2-音の再生-

音データを格納する「バッファ」と、音源となる「ソース」を作成し、音の再生を行います。 バッファの作成 音データのフォーマットはWAVEFORMATEX構造体で記述します。設定するメンバは「チャンネル数」「1サンプルあたりのビット数」「サンプリング周波数…

ゲームプログラミングに必要かもしれない数学 その1 -ベクトル編-

参考書籍 ゲームプログラミングのための3Dグラフィックス数学作者: Eric Lengyel,狩野智英出版社/メーカー: ボーンデジタル発売日: 2002/10/25メディア: 単行本(ソフトカバー)購入: 7人 クリック: 293回この商品を含むブログ (50件) を見るゲームプログラ…

スレッドからSendMessageしてはいけない(場合がある)。

↑のような、スレッドを使ったストップウォッチ(StopWatch)を作っています。 Start/Stopボタン スレッドの開始/停止 Resetボタン 表示0、スレッド停止 スレッド 経過時間を表示 MVCのControllerは概ね以下のような処理になると思います。 class StopWatchCont…

階層型有限状態機械(Hierarchical Finite State Machine)の実装

C++

前回有限状態機械(Finite State Machine:FSM)の実装 - while( c++ );の続きです。 参考サイト http://www.issei.org/diary/?20040108 以下のような階層化されたステートマシンを実装します。 現在の状態 イベント 次の状態 アクション start state_0 state…

有限状態機械(Finite State Machine:FSM)の実装

C++

マルチスレッドなアプリケーションの状態遷移が楽になるかも? ということで、ステートマシンを使ってみます。 参考サイト、書籍 The Boost Statechart Library - Tutorial - 1.36.0 ゲームAI連続セミナー「ゲームAIを読み解く」 第4回 レポート (1/3):Code…

MVC

こちらOpenGL GUI Applicationを参考にMVCを使ったwindowsアプリに修正します。 まずは、OpenGLを使わずに単純なアプリで実験します。 ボタンを押した回数をカウントするだけのアプリ download VC++2008EE MVC Model アプリケーションのデータを動作を定義 V…

OpenGLを使ってみる。その4.2 -描画スレッドの停止条件を追加(WM_ENABLE)-

前回OpenGLを使ってみる。その4.1 -描画スレッドの停止と再開について- - while( c++ );のサンプルでバグがあったので修正します。 1.メニュー→ヘルプ→バージョン情報でモーダルダイアログを表示すると、ウィンドウが無効状態でも描画スレッドが実行さ…

SDKっぽいプロジェクトの作り方。

C++

DirectX SDKのようなSDKを作ってみましょう。(DLLは次の機会に) プロジェクトの設定 とりあえず以下のような構成でプロジェクトとディレクトリを作成します。 (VC++2008ExpressEdition) app(Win32プロジェクト) sdk(スタティックリンクライブラリ) i…

OpenGLを使ってみる。その4.1 -描画スレッドの停止と再開について-

前回OpenGLを使ってみる。その4 -描画スレッド- - while( c++ );のサンプルでは、ウィンドウのリサイズ時(WM_SIZE)のみ描画スレッドを停止していました。 つまり、ウィンドウを最大化・最小化した時や、メニューを選択している時も描画ループが実行されま…

OpenGLを使ってみる。その4 -描画スレッド-

リアルタイムな描画を行うために、描画スレッドを導入します。 一般的にはメインスレッド内でPeekMessageを使ってwindowsイベントを処理し、 アイドル時に描画する形になると思いますが、 メインスレッドはwindowsイベントに専念し、サブスレッドで描画して…

OpenGLを使ってみる。その3 -テクスチャ-

※terragenで生成した画像です。 サンプル opengl03.zip VC++2008EE OpenGLには画像をロードするための関数が用意されていません。 そのため、自力でロードするか、既存のライブラリを利用することになります。何を使うか迷ったのですが、プラットフォームはw…

OpenGLを使ってみる。その2 -2Dポリゴンの描画-

まずは2Dポリゴンを描画します。 サンプル [download] VC++2008EE ビューポートの設定 スクリーン上の座標で頂点座標を指定できるように、ビューポート、プロジェクション行列、ビュー行列を設定します。 プロジェクション行列はglOrthoで正射影行列を設定…

OpenGLを使ってみる。その1 -初期化編-

OpenGLのレンダーターゲット周りを触ってみたくなったので、しばらくOpenGLを使っていきます。久しぶりのC++です。 開発環境 windows vista/xp VC++2008ExpressEdition c++ wgl(GLUTは使わない) ウィンドウを作る 面倒なのでWin32アプリケーションウィザード…

実行効率と実装効率のトレードオフ?

DirectXのレンダーターゲットの管理がちょっと面倒になってきました。 レンダーターゲット、Zバッファの作成 バックバッファ、Zバッファの退避 レンダーターゲットの設定 HLSLの変数の設定 描画 レンダーターゲット、Zバッファを元に戻す レンダーターゲット…

「遅延レンダリング」と言うらしい。

遅延レンダリングの詳細に関してはこちらをどうぞ。 http://www.twin-tail.jp/index.php?DirectXGraphics%20-%20%E9%81%85%E5%BB%B6%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E6%9C%AC 色、法線、位置をテクスチャに出力す…

PostProcessっぽい何か。

ようやくそれっぽいものが出来たので、アップしておきます。 後はエフェクトファイルを追加するだけです。 サンプル post_process02.zip VC#2008EE用 VertexShader2.0以上、PixelShader2.0以上 使い方 「active effects」内のエフェクトが上から順に実行され…

マルチレンダーターゲット

DirectX SDKの「Post Process」的なものを作るために、 まずはマルチレンダーターゲットを試してみました。 1パスで同時に3つのテクスチャに描き込んでいます。 左上から通常のシーン、Normal Map(法線マップ)、Position Map(位置マップ)、 位置マップ…

Gaussian Blur

いい感じでぼけてます。 Variance Shadow Map用にGaussian Blurを実装しました。 と言っても、t-potさんのコピペですw 浮動小数点バッファ(Format.G32R32F)を使っているため、青くなるようです。 参考サイト http://tpot.jpn.ph/t-pot/program/79_Gauss/i…

DirectX SDKのPostProcessで遊んでみる。

いろんなエフェクトを組み合わせて、すぐに結果を確認できるのは便利ですね。 とりあえず、このサンプルで用意されているエフェクトを全て自分で実装してみます。