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

OpenGLでSpriteBatchクラスを作る。

VertexBufferのテンプレート化 VertexBufferで扱う頂点は、 2Dか3Dか colorを持つかどうか テクスチャ座標を持つかどうか などユーザが自由に決めることができるので、テンプレート化しておくと便利です。 /** * 頂点バッファに特化したバッファオブジェクト…

BufferObjectクラスを作る。

今回はOpenGLでDirect3D風の頂点バッファクラス、インデックスバッファクラスを作ります。 まずはOpenGLのバッファオブジェクトの基礎から。 バッファオブジェクトの使用手順。 1.バッファオブジェクトが利用可能かどうか調べる。 1-1.サポートされているExt…

Programmers' Grimoireを予約しました。

C++

わくわく。 超楽しみ。私はまだいわゆる「変態(褒め言葉)」の域には達していませんが、これを読んで一歩でも「変態」に近付けるよう頑張ります!変態C++erになりたい貴方も是非。 [Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++…

std::unique_ptrでHDCとHGLRCを扱う。

ゲームフレームワーク的なものを作る。番外編1。 windowsプログラミングにおいて、HDCなどのハンドルの管理は非常に面倒ですよね? HWND hwnd = ...; HDC hdc = GetDC( hwnd ); GDIを使った描画など; ReleaseDC( hwnd, hdc ); //使い終わったらReleaseするの…

ゲームフレームワーク的なものを作る。(10)〜OpenGLでテクスチャを使う〜

まずはOpenGLでテクスチャを使用する際の基本から。 R8G8B8A8の32bitテクスチャを作る GLuint texture; Size size( w, h ); DWORD pixel[] = { ... }; //適当なピクセルデータを設定しておく glGenTextures()で指定枚数のテクスチャを作成。とりあえず1でよ…

ゲームフレームワーク的なものを作る。まとめ。

とりあえず、ここまでのまとめ。 今後も週に1,2回程度のペースで追加していきます。 ゲームフレームワーク的なものを作る。(20)〜2Dキーフレームアニメーション〜 ゲームフレームワーク的なものを作る。(19)〜シーングラフ〜 ゲームフレームワーク的なもの…

ゲームフレームワーク的なものを作る。(9)〜OpenGLの初期化〜

今回はOpenGLを使った描画機能を追加していきます。久しぶりのOpenGLですね。 OpenGLの初期化 まず、OpenGLを利用するためのヘッダとライブラリをプロジェクトに追加します。VCをインストールすれば、標準で必要なファイルが含まれるので、特に新しくライブ…

ゲームフレームワーク的なものを作る。(8)〜描画エンジンの抽象化〜

描画エンジンの抽象化 windowsでゲームを作る場合、「Direct3D」か「OpenGL」を選択することになりますが、どちらも使ったことがある人であれば、誰もが一度はインターフェイスを用意して両方扱えるようにしたいと思うはず。 で、今回は上記のような単純なイ…

ゲームフレームワーク的なものを作る。(7)〜Textureインターフェイスとスプライト描画メソッド〜

前回「ゲームフレームワーク的なものを作る。(6)〜スプライト描画〜 - while( c++ );」のサンプルでは、Direct3DのIDirect3DTexture9インターフェイスとID3DXSpriteインターフェイスを直接使って描画を行っていましたが、フレームワーク利用者に対してDirect…

ゲームフレームワーク的なものを作る。(6)〜スプライト描画〜

今回はDirect3D側で用意されているID3DXSpriteインターフェイスを使って、画像ファイルからテクスチャを生成し、画像の描画を行います。 スプライト描画オブジェクトの生成 Graphicsクラスにスプライト描画オブジェクト生成メソッドを追加します。前述のデバ…

ゲームフレームワーク的なものを作る。(5)〜Point、Size、Rect、Color〜

今回はグラフィックス系プログラムでよく使われる点、サイズ、矩形、色クラスを作ります。 とりあえず、基本的な機能のみ。 Pointクラス スクリーン上の点を表す。 class Point { public: Point( int x = 0, int y = 0 ); public: int x, y; }; Point::Point…

ゲームフレームワーク的なものを作る。(4)〜文字列描画〜

今回はID3DXFontを使った文字列描画を行います。 前回「ゲームフレームワーク的なものを作る。(3)〜Graphicsクラス〜 - while( c++ );」のGraphicsクラスに、 ID3DXFontの生成関数 文字列描画関数 std::shared_ptr を追加します。 /** * Graphicsクラス */ c…

ゲームフレームワーク的なものを作る。(2)〜Gameクラスに描画機能を追加〜

前回「ゲームフレームワーク的なものを作る。(1)〜Gameクラス〜 - while( c++ );」のGameクラスに、Direct3Dを使った描画機能を追加します。使用するDirectX SDKのバージョンはFebruary 2010です。初期化と解放、シーンのレンダリングについて必要最小限の機…

ゲームフレームワーク的なものを作る。(3)〜Graphicsクラス〜

前回「ゲームフレームワーク的なものを作る。(2)〜Gameクラスに描画機能を追加〜 - while( c++ );」、Gameクラスへ描画機能を追加しました。 このまま画像などの描画機能も追加していくとGameクラスが肥大化するので、以下のように描画機能だけGraphicsクラ…

ゲームフレームワーク的なものを作る。(1)〜Gameクラス〜

前回「windowsでゲームループを作る。(2)〜Windowクラス〜 - while( c++ );」のゲームループをさらに発展させて、ゲームフレームワーク的なものを適当に作っていきます。 Gameクラスを作る ゲームを起動するためには、事前に様々なオブジェクトの初期化が必…

windowsでゲームループを作る。(2)〜Windowクラス〜

VC++2010を使い始めたので、出来るだけC++0xの機能を使いつつ、前回(http://d.hatena.ne.jp/setuna-kanata/20100512/1273685558)のプログラムを書き換えていきます。 Windowクラス まずはHWNDのラッパークラスであるWindowクラスを作ります。今回必要にな…

windowsでゲームループを作る。

C/C++とwindowsでゲームを作る時、ウィンドウクラスを登録して、ウィンドウを作って、メッセージループを回して、ウィンドウプロシージャを用意して…と、非常に面倒ですよね。正直main関数内でそのようなつまらない記述を見たくないわけです。もっと素直に …

variantの実装(4) -static_visitor-

C++

前回(variantの実装(3) -placement new- - while( c++ );)のつづき。variantに任意のオブジェクトを格納することが出来たので、今回はオブジェクトを取り出してみます。 variantに格納されているのオブジェクト(storage_)の型は、メンバwhich_で型に対応す…

variantの実装(3) -placement new-

C++

前回(variantの実装(2) -aligned_storageを作る- - while( c++ );)のつづき。 参考 2005-11-02 アライメントの問題はおそらく解決できたので、placement newを使ってスタック上の未初期化領域に任意のオブジェクトを生成してみます。 class Hoge { public:…

variantの実装(2) -aligned_storageを作る-

C++

前回(variantの実装(1) -みんな大好きテンプレートメタプログラミング!- - while( c++ );)のコメントで、アライメントの問題に関してご指摘を頂いたので、variantの実装の前にaligned_storageを実装してみたいと思います。 ただしVC++2008だけを想定した…

variantの実装(1) -みんな大好きテンプレートメタプログラミング!-

C++

参考 Chapter 27. Boost.Variant - 1.42.0 letsboost::variant Boost.Variant の assign の処理 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ Tiny Template Library multi-type, single value. 1つの変数で複数の型を扱いたい場合、C言語…

TinyXML + babelを使ってみる。(3) -シリアライズ-

前回(TinyXML + babelを使ってみる。(2) -Visitorでトラバース- - while( c++ );)の続き。今回はシリアライズ、デシリアライズについて勉強します。 といっても、XMLファイルへの出力にはまだ触れていないので、デシリアライズのみ扱います。 シリアライズ…

TinyXML + babelを使ってみる。(2) -Visitorでトラバース-

前回(TinyXML + babelを使ってみる。(1) - while( c++ );)の続き。 XMLファイルからDOMツリーを構築 TiXmlDocument doc(pFilename); bool loadOkay = doc.LoadFile(); if (loadOkay) { ... } else { //Failed to load file } メモリからDOMツリーを構築 Ti…

winsockを使ってみる。(2) -acceptスレッド-

前回(winsockを使ってみる。(1) - while( c++ );)、コネクションを作って簡単な送受信を行いましたが、acceptはいわゆるブロッキング関数であり、クライアントが接続してくるまで、またはサーバソケットが閉じられるまで、呼び出し元スレッドが停止します…

winsockを使ってみる。(1)

boost::asioを使いたかったのですが、ネットワークの知識が乏しいので、まずはwinsockの勉強をしようと思います。 参考サイト Winsock Programmer's FAQ winsockプログラミング:Geekなぺーじ 3 Minutes Networking とりあえず以下のように使えるSocketクラス…

shared_ptrの実装9 -weak_ptrの実装-

C++

前回(shared_ptrの実装8 -weak_ptrに対応させる- - while( c++ );)の続き。weak_ptrを作ります。 sp_counted_base リソースを管理するための参照数(shared、weak)を保持するクラス。shared_count、weak_countによって共有される共有オブジェクト。 class…

shared_ptrの実装8 -weak_ptrに対応させる-

C++

boost::weak_ptrの使い方は、多くの方々が解説していますので割愛します。 weak_ptr http://www.ustream.tv/recorded/2981654 ここでは実装方法についてかなり適当に解説します。 一応前回(shared_ptrの実装7 - while( c++ );)の続き。 まとめページ(shar…

TinyXML + babelを使ってみる。(1)

TinyXML C++で作られたシンプルで軽量なXMLパーサです。速度は速くは無いですが、扱いやすいライブラリです。 本家TinyXml Main Page チュートリアルTinyXml: TinyXML Tutorial babel C++で作られた各種文字コード( シフトJIS, JIS, EUC, UNICODE(UTF8, UTF…

premakeでvcproj、slnを自動生成。

昨日のyake game engine(http://www.yake.org/)のVCプロジェクトファイル自動生成は、premakeで出来ました。 premakeの解説はこちらをどぞ。 premakeを使ってコマンドラインで開発(vcでもw) - 三次元日誌 VCのプロジェクト生成は意外に面倒。(特にプロジ…

海外製のゲームエンジン、ライブラリ。

某スレッドのコピペです。http://www.devmaster.net/engines/ Torque 3D | Products | GarageGames.com 3D Engine and Game Development SDK by Truevision3D Gamestudio game development system Leadwerks Game Engine - Easy-to-learn development for 3D…