サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
setuna-kanata.hatenadiary.org
↑のような、スレッドを使ったストップウォッチ(StopWatch)を作っています。 Start/Stopボタン スレッドの開始/停止 Resetボタン 表示0、スレッド停止 スレッド 経過時間を表示 MVCのControllerは概ね以下のような処理になると思います。 class StopWatchController { private: StopWatchModel* model; StopWatchView* view; public: //WM_COMMAND int command( windows::CommandEvent& e ) { if( e.id == Start/Stopボタン ) { model->process_event( Start/Stopイベント ); view->update(); } if( e.id == Resetボタン ) { model->p
まずはOpenGLでテクスチャを使用する際の基本から。 R8G8B8A8の32bitテクスチャを作る GLuint texture; Size size( w, h ); DWORD pixel[] = { ... }; //適当なピクセルデータを設定しておく glGenTextures()で指定枚数のテクスチャを作成。とりあえず1でよい。 glBindTexture()で作成したテクスチャをバインドしてから、フィルタなどのパラメータを設定 フィルタの設定は必須。 glTexture2D()でピクセルデータをコピー。 バインド解除 glPixelStorei( GL_UNPACK_ALIGNMENT, 4 ); glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); glTexParameteri( GL
とりあえず、ここまでのまとめ。 今後も週に1,2回程度のペースで追加していきます。 ゲームフレームワーク的なものを作る。(20)〜2Dキーフレームアニメーション〜 ゲームフレームワーク的なものを作る。(19)〜シーングラフ〜 ゲームフレームワーク的なものを作る。(18)〜シリアライズ・デシリアライズ〜 ゲームフレームワーク的なものを作る。(17)〜オブジェクトプール〜 ゲームフレームワーク的なものを作る。(16)〜フェードイン・フェードアウト〜 ゲームフレームワーク的なものを作る。(15)〜ゲームの状態遷移(シーン遷移)〜 ゲームフレームワーク的なものを作る。(14)〜イベントハンドラ〜 ゲームフレームワーク的なものを作る。(13)〜イベントキューを作る〜 ゲームフレームワーク的なものを作る。(12)〜OpenGLで画像描画〜 ゲームフレームワーク的なものを作る。(11)〜OpenGLで文
WindowsVista以降、DirectSound3Dを使ってハードウェア的に3Dオーディオエフェクトをかけることはできません。 DirectSound - Wikipedia クロスプラットフォーム(WindowsとXbox)で共通に使える低レベルオーディオAPIである「Xaudio2」に置き換えられるそうです。 しかしネット上では「XAudio2」に関する(日本語の)記述があまり見られません。というか、サウンドプログラムに興味を持っている人が少ないのかな? さすがにDirectSoundでは時代遅れだろうということで、今回から「XAudio2」を使ってみたいと思います。ついでに「OpenAL」も触ってみる予定。 開発環境 windows7 professional 64bit DirectX SDK(Nobember 2008) Visual C++ Express Edition
前回の続き 一応スマートポインタらしく動作するshared_ptr風のクラスができましたが、何かダサいですね。美しくない。boost::shared_ptrと比較すると、全くの別物であることがわかります。参照カウンタなどの内部の実装がそのまま見えてしまっているのはよろしくないです。 実際、boost::shared_ptrの内部では、参照数を増減する部分を隠蔽しています。 { shared_ptr< int > a( new int( 100 ) ); shared_ptr< int > b = a; b = a; } このように動作させるためのコピーコンストラクタ、operator=、デストラクタさえもboost::shared_ptrでは用意されていません。そんな馬鹿な。 というか素晴らしい。 ソースを見るとメンバは2つ。 template < typename T > class s
参考 Chapter 27. Boost.Variant - 1.42.0 letsboost::variant Boost.Variant の assign の処理 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ Tiny Template Library multi-type, single value. 1つの変数で複数の型を扱いたい場合、C言語ではunionを使用しますが、 C++ unionでは、std::stringを扱うことが出来ません。 union { int a; double b; std::string c; //illegal: std::string is not a POD type! }; C++でunion的なものを使いたい場合、Boost.Variantが便利です。 boost::variant< int, double,
VertexBufferのテンプレート化 VertexBufferで扱う頂点は、 2Dか3Dか colorを持つかどうか テクスチャ座標を持つかどうか などユーザが自由に決めることができるので、テンプレート化しておくと便利です。 /** * 頂点バッファに特化したバッファオブジェクト */ template< typename Vertex > class VertexBuffer : public BufferObject { public: /** * 頂点配列でバッファを更新 */ void update( int offset, int vertex_count, const Vertex* vertex ) { BufferObject::update( offset, sizeof( Vertex ), vertex_count, vertex ); } public: /**
XAudio2のまとめ XAudio2を使ってみる。その1-初期化- - while( c++ ); XAudio2を使ってみる。その2-音の再生- - while( c++ ); XAudio2を使ってみる。その3-WAVファイルの再生- - while( c++ ); XAudio2を使ってみる。その4-ストリーミング再生- - while( c++ ); XAudio2を使ってみる。その5-スレッドによるポーリング- - while( c++ ); 予定 XAudio2を使ってみる。その6-スレッドによるイベント通知- XAudio2を使ってみる。その7-OGGファイルの再生- XAudio2を使ってみる。その8-オーディオ管理クラス- XAudio2を使ってみる。その9-3Dサウンド- XAudio2を使ってみる。その10-エフェクト-
日本語ドキュメントshared_ptr、weak_ptr boost勉強会http://www.ustream.tv/recorded/2981654 Smart Pointer Programming Techniques 実装してみた shared_ptrの実装1 - while( c++ ); shared_ptrの実装2 - while( c++ ); shared_ptrの実装3 - while( c++ ); shared_ptrの実装4 - while( c++ ); boost::shared_ptrっぽく。 shared_ptrの実装5 - while( c++ ); shared_ptr< void >を可能にする。 shared_ptrの実装6 - while( c++ ); 適当なクラス図とか。 shared_ptrの実装7 - while( c++ ); dele
前回有限状態機械(Finite State Machine:FSM)の実装 - while( c++ );の続きです。 参考サイト http://www.issei.org/diary/?20040108 以下のような階層化されたステートマシンを実装します。 現在の状態 イベント 次の状態 アクション start state_0 state_0 event_0 state_3 action_0 state_1 event_1 state_0 state_0 event_2 end ※現在の状態でイベントが処理できない場合は、親の状態に渡されます。 start --> state_0 state_4::entry() state_0::entry() state_0 -- event_0/action_0 --> state_3 state_0::exit() state_1::entry(
超便利ですね。PropertyGridまじパネェっす! C#を使い始めて以来、多分最も感動したのではないかと。 昨日までC#のプロパティとは、 「get、setメソッドを多少簡単に記述できるようにしただけ」 と勝手に思い込んでいたのですが、 PropertyGridを使ってみて初めてその便利さを実感しました。 単にクラス間のメンバアクセスを簡略化できるだけでなく、 PropertyGridと組み合わせることで、アプリケーションからのアクセスも容易になるわけですね! ということで、今回はPropertyGridな話です。 基本的な使い方はこちらを参照してください。 PropertyGridコントロールの使い方 - .NET Tips (VB.NET,C#...) http://www.microsoft.com/japan/msdn/net/general/usingpropgrid.asp
リアルタイムな描画を行うために、描画スレッドを導入します。 一般的にはメインスレッド内でPeekMessageを使ってwindowsイベントを処理し、 アイドル時に描画する形になると思いますが、 メインスレッドはwindowsイベントに専念し、サブスレッドで描画してみます。 サンプル opengl04.zip VC++2008EEで作成 opengl.exeを実行してください 描画スレッド boost::threadのようにテンプレートで実装したいところですが、 無駄に規模が大きくなりそうなので、もっと単純なスレッドクラスを作ってみます。 thread_baseクラス 最小限のスレッド基底クラス 派生クラスでrunを実装する class thread_base { private: HANDLE handle; HANDLE end_event; HANDLE stop_event; pu
マルチスレッドなアプリケーションの状態遷移が楽になるかも? ということで、ステートマシンを使ってみます。 参考サイト、書籍 The Boost Statechart Library - Tutorial - 1.36.0 ゲームAI連続セミナー「ゲームAIを読み解く」 第4回 レポート (1/3):CodeZine(コードジン) smg 実例で学ぶゲームAIプログラミング 状態遷移図 ツールを使って以下のような状態遷移図が書けるとちょっとだけ幸せになれるかもしれません。 http://jude-users.com/ja/ stop watch 階層型有限状態機械(Hierarchical Finite State Machine) 今回の目的はHFSMを実装することです。(上の図のようなネストされた状態遷移) boostにもステートマシンクラスが用意されていますが(boost::state
こちらOpenGL GUI Applicationを参考にMVCを使ったwindowsアプリに修正します。 まずは、OpenGLを使わずに単純なアプリで実験します。 ボタンを押した回数をカウントするだけのアプリ download VC++2008EE MVC Model アプリケーションのデータを動作を定義 View、Controllerから完全に独立している。 View Modelからデータを取り出して、画面に出力。 Controller ユーザからのイベントに応答し、データの修正、画面の更新要求を行う。 ※一般的なMVCとは異なります。 Model アプリケーションに必要なメンバとメソッドを記述します。 class HogeModel : public Model { private: int count; public: HogeModel() : count( 0 ) {} voi
数学は苦手です! 数式だけ書かれてもわかりませんっ!! 図を描いて下さい。 とりあえず、スクリーン座標p(x,y)のワールド座標q(x',y',z')を求めます。 逆行列による2Dから3Dへの逆変換 カメラと被写体の間に3Dのスクリーンがあると考え、その平面上の点qを求めます。 といっても、pにワールド、ビュー、プロジェクション、ビューポートの逆行列を掛けるだけです。 さらに言うと、Direct3Dで2D→3D逆変換のための関数が用意されています。 public struct Vector3{ public static Vector3 Unproject(Vector3 v, object viewport, Matrix projection, Matrix view, Matrix world); } ビューポートは行列ではない ワールドは単位行列でよい 変換元のスクリーン座標pのZ
このページを最初にブックマークしてみませんか?
『while( c++ );』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く