C#

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

遅延レンダリングの詳細に関してはこちらをどうぞ。 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…

RenderTargetクラスを作る

テクスチャに対してレンダリングするためには、 Usage.RenderTarget、Pool.Defaultを指定して作ったテクスチャ 3D描画を行う場合の深度バッファ 実際の描画先となるテクスチャのサーフェイス の3つが必要になります。 さらに、デバイスのResizingイベント時…

シャドウマップの改良 -側面のジャギーを軽減-

前回HLSLで影の描画 -シャドウマップ- - while( c++ );のシャドウマップを使った影の描画を、もう少しキレイにしてみます。 特にライトへのベクトルと面の法線ベクトルのなす角が90度に近い部分の汚い影ですね。とりあえず、らしく見えれば良いということで…

HLSLで影の描画 -シャドウマップ-

シェーダをさらに使ってみよう、ということで影を描画してみます。 影を描画する方法はいろいろありますが、今回はシャドウマップを使います。 参考サイト その44 深度バッファシャドウの根っこ:0から原理を眺めてみよう シャドウマップの実装方法は上記の…

C#でツールを作る その16 -PropertyGridを使ってみる-

超便利ですね。PropertyGridまじパネェっす! C#を使い始めて以来、多分最も感動したのではないかと。 昨日までC#のプロパティとは、 「get、setメソッドを多少簡単に記述できるようにしただけ」 と勝手に思い込んでいたのですが、 PropertyGridを使ってみて…

C#でツールを作る その15.1 -ランバート反射-

もっとも単純なライティングですね。 輪郭線もシェーダで描画したいので、はちゅねのモデルから面を反転した黒いメッシュを削除しました。 サンプル download VC#2008EE VertexShader2.0 PixelShader2.0 miku miku01.x miku01.fx miku01.mqo miku.dds miku.j…

C#でツールを作る その15 -HLSLを使ってみる-

今ではシェーダも一般的になっているようなので、私もちょっと遊んでみようと思います。とりあえず、最低限必要なものを。 Effectオブジェクトの作成と破棄 コンパイルエラーがあるとerrに文字列返ってくる private Effect effect = null; String err; //コ…

C#でツールを作る その14 -スクリーン座標をワールド座標に変換-

数学は苦手です! 数式だけ書かれてもわかりませんっ!! 図を描いて下さい。 とりあえず、スクリーン座標p(x,y)のワールド座標q(x',y',z')を求めます。 逆行列による2Dから3Dへの逆変換 カメラと被写体の間に3Dのスクリーンがあると考え、その平面上…

C#でツールを作る その14.1 -マウスではちゅねを動かす-

サンプル tool14_1.zip VC#2008EE用 「menu」→「file」→「open」から適当なモデルを選択してください。 ZX平面上のマウス座標を求めてTranslationに設定する world_mouse = ScreenToWorld( screen_mouse ); device.Transform.World = Matrix.Translation( To…

C#でツールを作る その12.2 -Modelクラス-

Mesh、Material、Textureの管理が面倒になってきたのでクラス化しましょう。 サンプル tool12_2.zip VC#2008EE用 Modelクラス IDisposableの実装 描画メソッド Model生成メソッド class Model : IDisposable { private Mesh mesh = null; private Material[]…

C#でツールを作る その12.1 -ぐるぐるほっぺ-

大事なものを忘れていました。 サンプル download VC#2008EE用 αブレンド αブレンドを有効にする device.RenderState.AlphaBlendEnable ブレンド係数 SourceBlend:DestinationBlend=α:1−α device.RenderState.AlphaBlendEnable = true; device.RenderSta…

C#でツールを作る その13 -メニューからモデルを開く-

サンプル tool13.zip VC#2008EE用 OpenFileDialog ツールボックスから「OpenFileDialog」を追加 ダイアログを表示する openFileDialog1.ShowDialog() OKボタン(開く)を押したときの処理はイベントで追加可能 openFileDialog1.FileOk とりあえずモデルファ…

C#でツールを作る その11 -AttributeBuffer-

1つのMesh内に複数のMaterialが存在するとき、AttributeBufferを使うと便利です。 サンプル tool11.zip VC#2008EE用 参考 http://www.devmaster.net/forums/showthread.php?t=5956 AttributeBuffe 各FaceにMaterial番号を設定して、Meshを最適化する 隣接性…

C#でツールを作る その12 -XファイルからMeshを生成-

前回、頂点バッファ、インデックスバッファ、属性バッファから直接Meshを構築しましたが、毎回このようにMeshを作ると面倒なので、Xファイルからロードしてみます。Xファイルには以下の内容が含まれます。(メタセコから生成されるXファイル) 頂点配列 イン…

C#でツールを作る その9 -キューブの作成-

3Dの基本ということで、キューブを作ってみましょう。 頂点データ 3D頂点座標、頂点色 CustomVertex.PositionColored 頂点数:8 CustomVertex.PositionColored[] v = new CustomVertex.PositionColored[ 8 ]; v[ 0 ] = new CustomVertex.PositionColored( -…

C#でツールを作る その8 -カメラの制御-

C#

3Dのツールなので、マウスのドラッグ・ホイールによるカメラの制御は必須です。 ということで、以下の機能を追加します。 右ドラック:カメラの回転 ホイール:ズーム サンプル tool08.zip VisualC#2008EE用 極座標 カメラの回転の実装方法はいろいろありま…

C#でツールを作る その10 -ライティング-

影(shadow)ではなく、陰(shade)ですね。 表面の模様はテクスチャを使うので、今回から頂点色は使いません。 マテリアル Material[] material = new Material[ 1 ]; material[ 0 ].Diffuse = Color.White; material[ 0 ].Ambient = material[ 0 ].Diffuse…

C#でツールを作る その9.1 -Meshクラス-

前回のエントリでは、VertexBufferとIndexBufferを自分で作って描画していましたが、 複数のモデルを描画する際、モデル毎にVertexBuffer、IndexBufferを作るのは大変です。 モデルクラス的なものを自作してもいいですがそれも面倒です。ということで、Direc…

C#でツールを作る その4 -2Dポリゴン-

3Dの前に軽く2Dをやってみます。 サンプル tool04.zip VisualC#2008 ExpressEdition用 DrawUserPrimitives()で描画 まずは頂点バッファを使わずに頂点配列を直接渡します。 2D頂点座標、頂点色 CustomVertex.TransformedColored 頂点配列を直接渡す private …

C#でツールを作る その7 -グリッドと軸の描画-

グリッドと軸 3D頂点座標、頂点色 CustomVertex.PositionColored 1辺が1のラインをX方向、Z方向にそれぞれ11本=11*2ライン X軸、Y軸、Z軸=3ライン PrimitiveType.LineListで描画 とりあえず全体を5倍で描画 private VertexBuffer grid_axis…

C#でツールを作る その6 -3Dポリゴン 描画編-

3D描画のための準備が出来たので、実際に単純な3Dポリゴンを描画してみましょう。 サンプル tool06.zip 3D用頂点配列 3D頂点座標、頂点色、テクスチャ座標 CustomVertex.PositionColoredTextured CustomVertex.PositionColoredTextured[] v = new CustomVert…

C#でツールを作る その5 -3Dポリゴン 準備編-

3D描画のための設定はいろいろ面倒ですねぇ。 3Dを使い始めた頃は何を設定していいのか全然わからなくて、非常に困りました。 少しでも設定が足りないと何も描画されないですからね。エラーとか警告を出してくれれば楽なんですが。。。 デバイス生成時のパラ…

C#でツールを作る その3.1 -ApplicationContextを使ってみる-

前回C#でツールを作る その3-デザインの変更- - while( c++ );のMain()は以下のようになっていますが、 static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); using( Hoge hoge = new Hoge() ) …

C#でツールを作る その3-デザインの変更-

ツールっぽいデザインに変更してコントロールに対して描画します。 フォーム Form.spritContainer.Panel1に追加するUserControl。ここに描画します。 実行結果 ソース Hoge.cs アプリケーションクラス using System; using System.Collections.Generic; usin…

C#でツールを作る その2-文字列の描画-

まずは描画の基本、文字列ですね。 実行結果 ソース フォントの作成 文字列の描画 namespace WindowsFormsApplication1 { public partial class Form1 : Form { /*...*/ private Microsoft.DirectX.Direct3D.Font font = null; /*...*/ private void Form1_L…

C#でツールを作る その1-Direct3Dの初期化-

DirectXの解説サイトはたくさんあるのでググって下さい。 とりあえずこことか http://sorceryforce.com/manageddirectx/direct3d_stepup.html VisualC#2008ExpressEditionを使っています。 実行結果 ソース デバイスの初期化、解放 バックバッファの塗りつぶ…