S.F. Page

Programming,Music,etc...

DirectX

Combining XAML and DirectX - Windows 8 app developer blog - Site Home - MSDN Blogs

Combining XAML and DirectX - Windows 8 app developer blog - Site Home - MSDN Blogs. DirectX and XAML interopの内容をやさしく解説。まだ日本語訳されていない。

DirectX and XAML interop

DirectX and XAML interop. DirectXとXAMLの相互運用に関して。SurfaceImageSourceはXAMLの中にDirectXの描画領域を作る。VirtualSurfaceImageSourceは大きい領域をDirectXで描画するときに使う。 SwapChainBackgroundPanelは背景をDiretctXスワップチェーン…

Step 3: Connect the DirectX swap chain

Direct3D sprite sampleのソースコードを眺めてみている。DirectXBaseクラスというのがDirect2D/3Dをラップしているものである。Direct2D/Direct3D/ウィンドウが持つサーフェースとの相互連携の方法がWindows7と随分異なっている。新しいインターフェースや…

スクリーン座標で表示できるようになった。

いろいろ弄った結果表示できるようになった。下のイメージは640×480pxの画像を板ポリに貼りつけて表示してみたものである。画像は館山の海岸の写真である。 (20,20)の位置に表示すると下のようになる。 カリング・ライティングをなしにしてX軸で板ポリを回転…

座標変換で少し頭が混乱している。

やりたい事は、Z座標が0.0のときスクリーン座標を指定するとその位置にプリミティブを表示するということ。 ワールド座標までをスクリーン座標で指定して透視変換でスクリーン座標からDirect3Dの座標系に変換して表示する。理屈がよくわかっていないのでどん…

その51 スクリーンにある2D板ポリゴンを行列で操作する

その51 スクリーンにある2D板ポリゴンを行列で操作する. このページもとても参考になる。

その5 DirectX10版高速フォント表示

その5 DirectX10版高速フォント表示. 「④ 左上(0, 0)にするために」が実装の良いヒントとなりそうだ。 DirectX7くらいのころ2Dスプライトを実装する際にかなり勉強したような気もするがほんとにすっかり忘れてしまった。。

その15 あべこべにしちゃいけないカメラと座標系とDirect3D

その15 あべこべにしちゃいけないカメラと座標系とDirect3D. ローカル座標は横方向をX座標、上方向をY座標とするので、テクスチャ座標と上下が逆さまになります(筆者はまりその2でした) そういうことでテクスチャが天地逆の件は解決!

座標変換まとめてみた - maminusのメモか何か

座標変換まとめてみた - maminusのメモか何か. 私と同じ感じでハマっている方のポストを発見。読んでみる。

視野角を求める

このエントリを図にすると下のような感じ。 image/svg+xml Depth fov(視野角) 前クリップ面Z=0.0 後クリップ面Z=100.0 視点からの距離 1.0 1.0 視点 X=-1.0 X=1.0 この図は視錐台をZX平面上で観たものである。前クリップ面がZ=0の位置にありこの面の左端が-1…

視錐台

座標変換を考えるだけど、視錐台をいじることでできることを過去のソースコードで思い出した。元々はもふぉさんが公開していた日記やライブラリでやり方を学んだもの。Z=0.0でウィンドウと大きさが一致する。つまりウィンドウサイズが640×480ドットの場合、…

DirectX 11 and Tessellation - Enabled vs. Disabled

DirectX10とDirectX11の比較。テッセレーションを使うとカクカクしていたところがなめらかになり、立体感が増す。DirectX11のすごさがよくわかる。 DirectX12というのはいつリリースされるんだろうね。DirectX11がリリースされてから相当の期間が経っている…

座標変換を考える

これからUIをDirect3Dで描いてみることにする。私としてはせっかくの3D描画エンジンなので、ボタンとかは本物の3Dオブジェクトとして描くことにする。 ボタンは2D座標で配置して、3D座標に変換して描画する。その際必要なのがスクリーン2D座標と3D座標の変…

Nvidia Ocean Rendering DX11 GTX 580

こういう波エフェクトをウィンドウの背景できたら面白そうだね。でもGTX580だからできるのかも。GTS450だったら全然動かなかったりして 朝はいつも運河沿いを歩いて会社に行くのだけれど、運河の波面を観ているとすごい落ち着くんだよね。。背景が波面だった…

DirectCompute Mandelbrot Fractal Viewer | Yakiimo3D

DirectCompute Mandelbrot Fractal Viewer | Yakiimo3D. マンデルブロ集合フラクタル・ビューワー。すごい。

ウィンドウの抽象化とかシェーダーの勉強とかHighDPIとか

ウィンドウも少し抽象化を進めないといけないかな。例えばウィンドウハンドルを直接渡さないで、ウィンドウをラップしたオブジェクトを渡すようにするとかだ。それ以外にもいろいろ抽象化するところは有りそうだ。 サンクとか継続とかジオメトリとか状態管理…

子ウィンドウの描画

子ウィンドウを作成、描画してみた。問題なく出来たけど、このやり方だとGPUのリソースを食ってしまうな。。まあしょうがないか。作ろうとしているものはそんなにウィンドウを開くアプリでもないしね。 これをベースとして本格的に実装していくことにしよう。

DWMによるウィンドウの透明化ができた。

結局DWMによるウィンドウの透明化はできた。外枠はWS_POPUPスタイルにすることにより消した。 後は子ウィンドウでも同じことができれば自前描画ウィンドウの下地としては完成だ。

リージョン付きブラーでクライアント領域外を指定してみた。

Nyaruruさんの情報を元にリージョン付きブラーで、リージョンをクライアント領域外を指定してみた。 //Create and populate the BlurBehind structre DWM_BLURBEHIND bb = {0}; //Enable Blur Behind and Blur Region; bb.dwFlags = DWM_BB_ENABLE | DWM_BB_…

やっぱり甘かった。

「レイヤードウィンドウ以外の方法を考える」で考えたプランを試してみた。全体が半透明になるように実装したら結果は下記の通り。残念。。 AlphaBlendしてもDest DCはそのウィンドウ内のビットマップなのだから透過しないのは当たり前なのだ。バカですな、…

レイヤードウィンドウ以外の方法を考える

レイヤードウィンドウは子ウィンドウには適用できない。私としてはレイヤードウィンドウをバックバッファ代わりに使いクライアント領域外も含めて全てDirect3D11で描画しようかなと考えていた。しかし複数ウィンドウを開くアプリケーションはこの方式ではつ…

テクスチャの動的生成

テクスチャー自体を描画ターゲットにできることが分かったので、テクスチャを動的に作成して立方体に貼って回してみた。テクスチャに立方体を描いてそれをテクスチャにした立方体を回している。まあなんでもないことなんだけどちょっと面白くて。 Direct3D11…

レイヤードウィンドウ - テクスチャ経由の表示はうまくいった。

スワップチェーン経由での表示はクライアント領域しか表示出来なかったので、テクスチャにレンダリングしそれをGetDCしてUpdateLayeredWindowするように変更した。今回はうまくいった。ただ角が丸い。デフォルトでリージョンが設定してあるためだ。XPのUIの…

スワップチェーンが原因っぽい。

レイヤードウィンドウのウィンドウ枠いっぱいに表示できないのは、スワップチェーンのサーフェースがクライアント領域の大きさしか有効でないことが原因そうだ。サーフェースサイズはウィンドウサイズと同じなのだが、実際に描画されるのはクライアント領域…

レイヤードウィンドウの領域いっぱいへの描画

レイヤードウィンドウへの描画であるが、今まではクライアントエリアの大きさでUpdateLayerdWindowしていた。でも他のブログを見るとウィンドウサイズでも問題なく描画できるようなので試してみた。 しかしUpdateLayerdWindowの戻り値は成功(TRUE)にも関わら…

レイヤードウィンドウ - 非クライアント領域の描画をどうするか

レイヤードウィンドウで試していないことの一つに、非クライアント領域の描画もできるのかということだ。これができないとウィンドウフレームを自前描画できない。UpdateLayeredWindowの2つ目の引数hdcDstぶGetWindowDCの値を渡せばいいのだろうか。DXGIサ…

AlphaBlend

AlphaBlendはWindows2000からあるAPIである。Window7 & WDDM 1.1ドライバであればこのAPIは高速化されることが義務付けられている。でもどの程度高速化されるのかはハードウェア次第だと思うけれど。 昔DirectDrawというのがあって、画面転送を高速に行うた…

Direct3D11をもう少し深く勉強するか。

UI描画をDirect3Dで行えそうな感じになってきたものの、Direct3D11についてはチュートリアル以上の知識はまるでない。UI描画するときにどのようにすればいいのかはまだ見当がつかないのが実情である。すこしずつ理解していって見当をつけていくしか無いだろ…

立方体以外を透明化することができるようになった。

ようやく立方体以外のウィンドウ表示を透明化することができるようになった。スワップチェーンをターゲットにして描画し、スワップチェーンのサーフェースのポインタを取得、デバイスコンテキストを取得、レイヤードウィンドウを更新というやり方でできた。…

IDXGISurface1::GetDCでInvalid Call Error

スワップチェーンからIDXGISurface1へのポインタを取得することに成功したものの、その後IDXGISurface1::GetDCしようとするとInvalid Call Errorで落ちる。なんでだろう。。

スワップチェーンでもできるね

今朝はIDXGIFactory::CreateSwapChainで生成されるサーフェースをGDI互換することはできないと思っていたので、テクスチャをわざわざ作りそれを描画ターゲットにしようとしていたが、よくよく見るとDXGI_SWAP_CHAIN_DESC構造体のFlagsメンバにDXGI_SWAP_CHAI…

まずはこういう方向性で

ウィンドウモードでDirect3Dプリミティブのみを画面表示し、その他は透明化する方法はとりあえず下の手順で実現できそうな気がしてきた。 GDI互換テクスチャを作る。 そこに3Dプリミティブを描画する。 テクスチャからサーフェースを取得し、さらにDCを取得…

頭の中がごちゃごちゃしてきた。

DWM・レイヤードウィンドウ・Direct2D・Direct3Dについて調べていると頭のなかがごちゃごちゃしてきた。整理したいなぁとは思うけどもう少し勉強しないとだめだろうね。リージョンによる不定形ウィンドウとかWPFとかGDI・GDI+とか。使い方よりは相互の関係を…

レイヤードウィンドウ - カラーキー - GDIで塗りつぶす

SetLayeredWindowAttributesで指定色背景を透明にする件。試しにGDIで塗りつぶすとうまくいく。 やっぱりレイヤードウィンドウの透明化をDirect3D11の描画と協調して行うにはなにか工夫が必要なのかもしれない。そもそもできないのかもしれないが。もう少し…

レイヤードウィンドウ - カラーキー

レイヤードウィンドウのAPI SetLayeredWindowAttributesでカラーキーの機能がある。これは指定した色を透明にするものだ。色指定を仮に赤(RGB(255,0,0))にして、Direct3D11で背景を赤に塗りつぶしてもうまく透明にならない。なんでだろう。半透明はうまくい…

レイヤードウィンドウ

DWMのブラー効果+レイヤードウィンドウで半透明処理をやってみた。レイヤードウィンドウの効果により、3D描画部分も半透明となっている。 レイヤードウィンドウはWS_EX_LAYEREDを指定してCreateWindowExし、SetLayeredWindowAttributesで透明度などの効果を…

天の川が流れる月ヶ浜の夜 / 西表島[TIME LAPSE PHOTOGRAPHY] 1080P

西表島の星空。こんなに綺麗なんだ。千葉の夜空とえらい違いだね。

ウィンドウのサイズ変更に対応してみた

ウインドウのサイズ変更に対応してみた。でもウィンドウの大きさが変わると立方体の大きさも変わる。射影行列とかビューポートとかのイジリ方を少し考えないといけない。 ソースコード 当面はウィンドウを消して立方体のみを表示するのが目標だけれども、最…

とりあえずテスト画面を表示できた。

とりあえずテスト画面を表示できた。背景はアルファ値が0の赤で塗りつぶしていて、Aero Glassのブラー効果で半透明となっている。立方体はDirect3D11で描いている。クライアント領域を完全に透明にするのってどうやればできるのかな。

Introduction to the Direct3D 11 Graphics Pipeline

Introduction to the Direct3D 11 Graphics Pipeline Direct3D 11の機能紹介のpdf。今日電車の中で読むことにしよう。

Direct3D11コードを追加しはじめた。

Direct3D11コードを追加しはじめた。昔作りかけて放置していたDirect3D11の勉強用コードがあり、初期化部分はそのまま使えるのでコピペして追加している。下の画面は昔のテストコードを実行してみたところ。 しかしDirect3D9自体の固定パイプラインに慣れて…

Windowラッパーライブラリ - 描画部分

とりあえずスケルトンコードは出来たので、Direct3Dコードを入れて描画してみることにする。DirectX11についてはホント知識無いので、まずはチュートリアルレベルのコードを入れていく。 ウィンドウを非クライアントを含めてDirect3Dで描画するつもりである…

Blenderの頂点情報を読みだす。 ー足りない部分

Blenderファイルを読み出すコードで足りない部分があるのだが、それは「A shader's approach to DirectX 9」にあるサンプルコードらしいことがわかった。そのコードは下記サイトよりダウンロードできる。 http://www.d3dcoder.net/default.htm 上記コードも…

Blenderの頂点情報を読みだそうとしている。

まずはBlenderの頂点情報を読みだして頂点バッファ・インデックスバッファに格納し、描画しようとしている。下記サイトにBlenderファイルをDirect3D10にインポートするコードがある。 Importing Blender Files ダウンロードできるファイルはソースファイルが…

ディフューズ・スペキュラ・アンビエントとか

光源に関する言葉がなんとなく記憶の奥底から蘇ってくるような感じで、頭に湧き上がってきている。まあ昔DirectX3~9あたりでそれなりに勉強したもんね。。すっかり忘れていたけど思い出してきた。。 マテリアルとかグーローとかフォンとかも言葉としては思い…

Direct3D - ライティング

セマンティクスはよくわからないままなのだが、チュートリアル6を参考にライトを実装してみた。 ソースコード まあHLSLでいうセマンティクスとはベクトルの各成分の名前定義なのかな。。 ようやくであるがプログラマブル・シェーダーの自由度について実感し…

semantics - セマンティクス

HLSLには変数にセマンティクスを付けたりする。セマンティクスの言葉の意味は「意味論」で、要するにその変数の「意味」を表すことのようだ。「POSITION」やら「NORMAL」やら「TEXCOORD0」などを付けることでシェーダ間で意味を共有するようなのだが、なぜ必…

Direct3D11 - メッシュ表示したい

BlenderのデータをDirect3Dに直接読み込めるユーティリティを見つけたの。Blenderでモデルを作り、メッシュデータを表示したくなってきた。 結局はBlenderなどのツールでモデリングしたデータを読み込んで表示することになるので、今から着手してもよいかな…

Direct3D プログラマブル・シェーダーについて学ぶ

プログラマブル・シェーダーについて勉強しているところである。このプログラマブル・シェーダーというのはD3D9からあるのだが、固定機能パイプラインがあったので使うのを避けていたのである。そんなに難しいことをするのではなく、2Dスプライトを表示でき…

Direct3D11 - 立方体を表示

DirectX11 SDKサンプルのTutorial7のコードを参考に立方体を回してみた。コードはほぼそのままで、ポインタをスマポに変えた位である。 すこしハマった。インターフェース・ポインタへのアドレスを渡すところではスマポ(_com_ptr_tを使っている)でもoperat…