OpenGL
VertexBufferのテンプレート化 VertexBufferで扱う頂点は、 2Dか3Dか colorを持つかどうか テクスチャ座標を持つかどうか などユーザが自由に決めることができるので、テンプレート化しておくと便利です。 /** * 頂点バッファに特化したバッファオブジェクト…
今回はOpenGLでDirect3D風の頂点バッファクラス、インデックスバッファクラスを作ります。 まずはOpenGLのバッファオブジェクトの基礎から。 バッファオブジェクトの使用手順。 1.バッファオブジェクトが利用可能かどうか調べる。 1-1.サポートされているExt…
ゲームフレームワーク的なものを作る。番外編1。 windowsプログラミングにおいて、HDCなどのハンドルの管理は非常に面倒ですよね? HWND hwnd = ...; HDC hdc = GetDC( hwnd ); GDIを使った描画など; ReleaseDC( hwnd, hdc ); //使い終わったらReleaseするの…
まずはOpenGLでテクスチャを使用する際の基本から。 R8G8B8A8の32bitテクスチャを作る GLuint texture; Size size( w, h ); DWORD pixel[] = { ... }; //適当なピクセルデータを設定しておく glGenTextures()で指定枚数のテクスチャを作成。とりあえず1でよ…
とりあえず、ここまでのまとめ。 今後も週に1,2回程度のペースで追加していきます。 ゲームフレームワーク的なものを作る。(20)〜2Dキーフレームアニメーション〜 ゲームフレームワーク的なものを作る。(19)〜シーングラフ〜 ゲームフレームワーク的なもの…
今回はOpenGLを使った描画機能を追加していきます。久しぶりのOpenGLですね。 OpenGLの初期化 まず、OpenGLを利用するためのヘッダとライブラリをプロジェクトに追加します。VCをインストールすれば、標準で必要なファイルが含まれるので、特に新しくライブ…
描画エンジンの抽象化 windowsでゲームを作る場合、「Direct3D」か「OpenGL」を選択することになりますが、どちらも使ったことがある人であれば、誰もが一度はインターフェイスを用意して両方扱えるようにしたいと思うはず。 で、今回は上記のような単純なイ…
前回OpenGLを使ってみる。その4.1 -描画スレッドの停止と再開について- - while( c++ );のサンプルでバグがあったので修正します。 1.メニュー→ヘルプ→バージョン情報でモーダルダイアログを表示すると、ウィンドウが無効状態でも描画スレッドが実行さ…
前回OpenGLを使ってみる。その4 -描画スレッド- - while( c++ );のサンプルでは、ウィンドウのリサイズ時(WM_SIZE)のみ描画スレッドを停止していました。 つまり、ウィンドウを最大化・最小化した時や、メニューを選択している時も描画ループが実行されま…
リアルタイムな描画を行うために、描画スレッドを導入します。 一般的にはメインスレッド内でPeekMessageを使ってwindowsイベントを処理し、 アイドル時に描画する形になると思いますが、 メインスレッドはwindowsイベントに専念し、サブスレッドで描画して…
※terragenで生成した画像です。 サンプル opengl03.zip VC++2008EE OpenGLには画像をロードするための関数が用意されていません。 そのため、自力でロードするか、既存のライブラリを利用することになります。何を使うか迷ったのですが、プラットフォームはw…
まずは2Dポリゴンを描画します。 サンプル [download] VC++2008EE ビューポートの設定 スクリーン上の座標で頂点座標を指定できるように、ビューポート、プロジェクション行列、ビュー行列を設定します。 プロジェクション行列はglOrthoで正射影行列を設定…
OpenGLのレンダーターゲット周りを触ってみたくなったので、しばらくOpenGLを使っていきます。久しぶりのC++です。 開発環境 windows vista/xp VC++2008ExpressEdition c++ wgl(GLUTは使わない) ウィンドウを作る 面倒なのでWin32アプリケーションウィザード…