DirectX
まずは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」を選択することになりますが、どちらも使ったことがある人であれば、誰もが一度はインターフェイスを用意して両方扱えるようにしたいと思うはず。 で、今回は上記のような単純なイ…
前回「ゲームフレームワーク的なものを作る。(6)〜スプライト描画〜 - while( c++ );」のサンプルでは、Direct3DのIDirect3DTexture9インターフェイスとID3DXSpriteインターフェイスを直接使って描画を行っていましたが、フレームワーク利用者に対してDirect…
今回はDirect3D側で用意されているID3DXSpriteインターフェイスを使って、画像ファイルからテクスチャを生成し、画像の描画を行います。 スプライト描画オブジェクトの生成 Graphicsクラスにスプライト描画オブジェクト生成メソッドを追加します。前述のデバ…
今回はグラフィックス系プログラムでよく使われる点、サイズ、矩形、色クラスを作ります。 とりあえず、基本的な機能のみ。 Pointクラス スクリーン上の点を表す。 class Point { public: Point( int x = 0, int y = 0 ); public: int x, y; }; Point::Point…
今回はID3DXFontを使った文字列描画を行います。 前回「ゲームフレームワーク的なものを作る。(3)〜Graphicsクラス〜 - while( c++ );」のGraphicsクラスに、 ID3DXFontの生成関数 文字列描画関数 std::shared_ptr を追加します。 /** * Graphicsクラス */ c…
前回「ゲームフレームワーク的なものを作る。(1)〜Gameクラス〜 - while( c++ );」のGameクラスに、Direct3Dを使った描画機能を追加します。使用するDirectX SDKのバージョンはFebruary 2010です。初期化と解放、シーンのレンダリングについて必要最小限の機…
前回「ゲームフレームワーク的なものを作る。(2)〜Gameクラスに描画機能を追加〜 - while( c++ );」、Gameクラスへ描画機能を追加しました。 このまま画像などの描画機能も追加していくとGameクラスが肥大化するので、以下のように描画機能だけGraphicsクラ…
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 色、法線、位置をテクスチャに出力す…
ようやくそれっぽいものが出来たので、アップしておきます。 後はエフェクトファイルを追加するだけです。 サンプル post_process02.zip VC#2008EE用 VertexShader2.0以上、PixelShader2.0以上 使い方 「active effects」内のエフェクトが上から順に実行され…
DirectX SDKの「Post Process」的なものを作るために、 まずはマルチレンダーターゲットを試してみました。 1パスで同時に3つのテクスチャに描き込んでいます。 左上から通常のシーン、Normal Map(法線マップ)、Position Map(位置マップ)、 位置マップ…
いい感じでぼけてます。 Variance Shadow Map用にGaussian Blurを実装しました。 と言っても、t-potさんのコピペですw 浮動小数点バッファ(Format.G32R32F)を使っているため、青くなるようです。 参考サイト http://tpot.jpn.ph/t-pot/program/79_Gauss/i…
いろんなエフェクトを組み合わせて、すぐに結果を確認できるのは便利ですね。 とりあえず、このサンプルで用意されているエフェクトを全て自分で実装してみます。
テクスチャに対してレンダリングするためには、 Usage.RenderTarget、Pool.Defaultを指定して作ったテクスチャ 3D描画を行う場合の深度バッファ 実際の描画先となるテクスチャのサーフェイス の3つが必要になります。 さらに、デバイスのResizingイベント時…
前回HLSLで影の描画 -シャドウマップ- - while( c++ );のシャドウマップを使った影の描画を、もう少しキレイにしてみます。 特にライトへのベクトルと面の法線ベクトルのなす角が90度に近い部分の汚い影ですね。とりあえず、らしく見えれば良いということで…
シェーダをさらに使ってみよう、ということで影を描画してみます。 影を描画する方法はいろいろありますが、今回はシャドウマップを使います。 参考サイト その44 深度バッファシャドウの根っこ:0から原理を眺めてみよう シャドウマップの実装方法は上記の…
超便利ですね。PropertyGridまじパネェっす! C#を使い始めて以来、多分最も感動したのではないかと。 昨日までC#のプロパティとは、 「get、setメソッドを多少簡単に記述できるようにしただけ」 と勝手に思い込んでいたのですが、 PropertyGridを使ってみて…
もっとも単純なライティングですね。 輪郭線もシェーダで描画したいので、はちゅねのモデルから面を反転した黒いメッシュを削除しました。 サンプル download VC#2008EE VertexShader2.0 PixelShader2.0 miku miku01.x miku01.fx miku01.mqo miku.dds miku.j…
今ではシェーダも一般的になっているようなので、私もちょっと遊んでみようと思います。とりあえず、最低限必要なものを。 Effectオブジェクトの作成と破棄 コンパイルエラーがあるとerrに文字列返ってくる private Effect effect = null; String err; //コ…
数学は苦手です! 数式だけ書かれてもわかりませんっ!! 図を描いて下さい。 とりあえず、スクリーン座標p(x,y)のワールド座標q(x',y',z')を求めます。 逆行列による2Dから3Dへの逆変換 カメラと被写体の間に3Dのスクリーンがあると考え、その平面上…
サンプル tool14_1.zip VC#2008EE用 「menu」→「file」→「open」から適当なモデルを選択してください。 ZX平面上のマウス座標を求めてTranslationに設定する world_mouse = ScreenToWorld( screen_mouse ); device.Transform.World = Matrix.Translation( To…
Mesh、Material、Textureの管理が面倒になってきたのでクラス化しましょう。 サンプル tool12_2.zip VC#2008EE用 Modelクラス IDisposableの実装 描画メソッド Model生成メソッド class Model : IDisposable { private Mesh mesh = null; private Material[]…
大事なものを忘れていました。 サンプル download VC#2008EE用 αブレンド αブレンドを有効にする device.RenderState.AlphaBlendEnable ブレンド係数 SourceBlend:DestinationBlend=α:1−α device.RenderState.AlphaBlendEnable = true; device.RenderSta…
サンプル tool13.zip VC#2008EE用 OpenFileDialog ツールボックスから「OpenFileDialog」を追加 ダイアログを表示する openFileDialog1.ShowDialog() OKボタン(開く)を押したときの処理はイベントで追加可能 openFileDialog1.FileOk とりあえずモデルファ…
1つのMesh内に複数のMaterialが存在するとき、AttributeBufferを使うと便利です。 サンプル tool11.zip VC#2008EE用 参考 http://www.devmaster.net/forums/showthread.php?t=5956 AttributeBuffe 各FaceにMaterial番号を設定して、Meshを最適化する 隣接性…
前回、頂点バッファ、インデックスバッファ、属性バッファから直接Meshを構築しましたが、毎回このようにMeshを作ると面倒なので、Xファイルからロードしてみます。Xファイルには以下の内容が含まれます。(メタセコから生成されるXファイル) 頂点配列 イン…
3Dの基本ということで、キューブを作ってみましょう。 頂点データ 3D頂点座標、頂点色 CustomVertex.PositionColored 頂点数:8 CustomVertex.PositionColored[] v = new CustomVertex.PositionColored[ 8 ]; v[ 0 ] = new CustomVertex.PositionColored( -…