読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

Direct2D

音声ファイルから動画ファイルを作成する(7) – 波形データをDirect2Dで描画してみた。

ようやくだが、Direct2Dを使ってテクスチャに波形データを表示することができた。でもちょっと手抜きだ。 ソースコード(変更部分) 720p/30FPSなのになぜか画質が悪い。H.264エンコーダの設定に問題があるのかもしれないが、今のところどうすればいいのかわ…

Box2D + WinRTでゲームを作る (6) – Box2Dの処理結果をDirect3Dで描画する (2)

今日もどうやってシェイプを描こうか考えていた。考えていたというよりは、シェーダーについて学びかつその技術が描画に使えるかどうかを吟味していたというほうが正しいだろうか。 ヒントになったのは「Direct3D sprite sample」である。頂点データはいわゆ…

Box2D + WinRTでゲームを作る (5) – Box2Dの処理結果をDirect3Dで描画する

Box2Dの処理結果をDirect3Dで描画するため、シェーダー周りをどう作ろうか思案しているところである。実際のゲームではビットマップに置き換わるのだけれども、デバッグの時にシェイプやジョイントを表示できるようにしておけば便利である。頂点シェーダーは…

Box2D + WinRTでゲームを作る (4) – 動画出力できるようになった。

今週はWeb上のDirect3D、Media Foundationのリソースを参考にしながらコードを書いていた。まあなんとかスワップチェインの内容を動画出力できるようになった。 ソースコード ここで考えた手順でほぼうまくいった。 一応720p/30fpsでの出力はできている。今…

Box2D + WinRTでゲームを作る (3) – 動画出力方法を考える

今日はMedia Foundationドキュメントをみながらスワップチェインをどう出力するのかを考えていた。GPUメモリ -> CPUメモリの転送も極力減らしたいし、 拡大縮小もGPUにやらせたい。で以下の手順でいけるのではないかと。 スワップチェインと同じ大きさのテク…

Box2D + WinRTでゲームを作る (2) - 動画出力を試みる

作成中の画面を動画にしていたのだが、ちょっと処理速度的に厳しくなってきた。 アマレココでもExpression Encoderでも15FPSで処理がもたつく。デスクトップのキャプチャーは結構重い処理なのであろう。 Media FoundationのSink Writerを使って、スワップチ…

Box2D + WinRTでゲームを作る

「XAML DirectX 3D shooting game sample」をスケルトン化し、Box2DのコードおよびDirect2Dによる描画コードを追加した。 ソースコード この後でGDC2013 Game テンプレートなるものも見つけ、これでやり直そうかなと思ったけど、サウンドやメッシュ・入力周り…

Box2D + Windows Store Appsで出直し

Musicシーケンサーを作るといいながらなぜかシューティングゲームを作る流れとなっているが、このままデスクトップでシューティングゲームのコードを書いていくと最終的にはWindows Store Appの「XAML DirectX 3D shooting game sample」のようなものに行き…

Box2Dの処理結果をDirect2Dで描画する

ここ1週間はずっとBox2Dのドキュメントを読んだりしていて、なんとなくわかってきたのでコードを書いてみた。Box2Dの処理結果をDirect2Dで描画したもの。 今回Direct2Dのジオメトリ描画を初めて使ってみた。面白いね。簡単にできてしかも結構リアルに動く。

Box2Dをいじっている

物理エンジンをいろいろ見ていたら、Box2Dというのを見つけた。2Dの物理エンジンでC++で作られている。さっそくコンパイルして実行してみた。 やっぱり物理エンジンで動かすとリアルですな。。 私の人生を狂わせたシューティングゲームは何かといえば、 ギャ…

少しゲームの世界に入り込んでみる

Tumblrで「ゲーマーはもっと経営者を目指すべき!」の引用を見てからここ1週間ほどはこの記事をずっと読んでいた。読んでいるとゲームに対する興味が再び高まってきたのと、DirectX周りをいじっていると少しゲームに関する技術を追っかけてみたいなと思い始…

DirectComposition - 3D変換エフェクトを試す

3D変換エフェクトを試してみた。X軸で回転してみている。エフェクトとしては透明度と3D座標変換のみである。とりあえず実験はここまでにして、UIフレームワークを作っていくことにする。 ソースコード

DXGIスワップチェインをDirect2DとDirect3Dとで共有する

DXGIスワップチェインをDirect2DとDirect3Dとで共有することができた。やはりWindows8では比較的簡単にできる。ここまで来るのに2週間ちかくかかっているので簡単というには憚る感じもするが、まあWindows 7よりは簡単になったということである。 ソースコー…

ようやくDirect2Dが初期化コードが動くようになった

ようやくWindows 8版のDirect2D初期化コードが動くようになった。 初期化コードの書き方はかなり変わったが、DXGIとの連携もしやすくなっている。おそらくDirect3Dの初期化コードも以前よりも簡単に書けるだろう。残念ながら私のビデオカードでは11までの対…

Direct2Dの初期化方法はちょっと変わっている。

ここ2-3日、こちらの記事やMSDNを参考にDirect2Dの初期化コードを書いている。ついでにDirect3Dも一緒に使えるようにしようとしている。バージョンが上がり初期化コードの書き方がが変わり、比較的簡単になっている。初めからDirect3Dとの共存を意識した感じ…

SimpleSpritesをSwapChainBackgroundPanelで作りなおしてみる

XAML + Direct3Dの勉強のために、SimpleSpritesサンプルをSwapChainBackgroundPanelで作りなおしてみることにした。まあそんなに難しい作業ではないと思うのだが、どうか。

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の内容をやさしく解説。まだ日本語訳されていない。

Step 3: Connect the DirectX swap chain

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

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

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

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

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

Windows と C++: Direct2D によるレイヤード ウィンドウ

Windows と C++: Direct2D によるレイヤード ウィンドウ. いまやろうとしていることにヒントになりそうなドキュメント。電車の中で読むことにするか。

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

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

ちょっといろいろおさらいとか。考え事とか。

シーケンスエディタは本格的にUIを作るのでUI周りのAPIのおさらいとかをBoost MSMの学習と並行して行なっている。High DPIとか、DirectWrite、Direct2Dなど。歳をとるとほうっておくとどんどん脳から情報が失われていくので維持が本当に大変だ。 画面イメー…

ダイアログ内のコントロール(Widget)内でDirect2Dを使用する

WAVファイルの情報表示と、波形データ表示部分を付け加えるのを忘れていた。 波形表示の部分はDirect2Dを使用して描画する。最初はダイアログのhwndに対して描画しようと思ったけれどひょっとしてコントロールのhwndを取得したらコントロール内に描画できる…

ミニタイマー(3) - DWMの半透明ウィンドウとDirect2D描画の共有

DWMの半透明ウィンドウとDirect2D描画の共存だができた。 下記にその方法が書いてあった。Direct2DとDWMをキーワードにしてぐぐったらすぐに出てきた。 http://weblogs.asp.net/kennykerr/archive/2009/09/15/direct2d-and-the-desktop-window-manager.aspx …

STed2いじり(23) Direct2D - 透明色の矩形領域塗りつぶし

Direct2Dは通常描画時に常にアルファ値が考慮される。1.0だと描画され、0.5だと半透明、0.0だと描画されない。これはこれで良いのだが、矩形領域を透明部分も含めて上書きしたいときは一工夫する必要がある。例えば文字の上に文字を上書きしたい時は透明部分…

STed2いじり(22) GDIとDirect2Dの共用

結局BitBltまわりは、GDI関数でやることにして、先に進めることにした。 Direct2Dと共用する方法は、 デバイスコンテキストをDirect2Dのレンダーターゲットにする方法 Direct2Dのレンダーターゲットからデバイスコンテキストを取得してGDI関数を使う方法 の2…

Comparing Direct2D and GDIを読んで

今日はComparing Direct2D and GDIをずっと読んでいた。 読んでわかったことは、Windows7ではGDIもDirect2DもHWアクセラレーションが働くということだ。 WindowsXP以前のOSだとGDI描画でHWアクセラレーションが働くのはBitBltだけだったようだ(最初はそうじ…

STed2いじり(22) Direct2D化 - みかちゃんフォント

滞り気味。 すこしWindows Core Audioに惹かれているのと、BitBltを使ったテキストの反転処理を手をかけないでDirect2Dに持っていけないかなとか思案しているからである。 GDI関数もDirect2Dのレンダーターゲットに使用できるので、そのままでもいいんだけれ…

Direct2D - D2D1::ColorFとRGBマクロ

Direct2DのD2D1::ColorFのコンストラクタは32ビットのRGB値も指定することができる。 ColorF(UINT32, FLOAT)( UINT32 rgb, FLOAT a = 1.0 ); 上のように32bitのRGB値とアルファ値を別に指定する。RGB値は下記のビット構成になっている。 00000000rrrrrrrrggg…

STed2いじり(21) Direct2D化

かなり元の画面に近づいてきた。

Direct2D - BeginDraw()とEndDraw()

レンダーターゲットに対して描画を行う場合描画前にBeginDraw()・描画後にEndDraw()を呼び出さなくてはならない。これは描画がバッチ処理で行なわれるためである。 BeginDraw()でレンダーターゲットに描画開始を伝えると描画メソッドをレンダーターゲットに…

STed2いじり(20) Direct2D化

少しずつ進めている。 昨日・今日はライン描画(罫線)の部分を少し実装した。しかし歩みはめちゃめちゃ遅いな。。 今の実装の仕方だと、効率が悪い感じがするので、ひととおり動くようになったら最適化を行なわなくてはならない。また今は「もともと」のコ…

Direct2D - デバイス依存リソースとデバイス非依存リソース

Direct2Dのリソースにはデバイス依存リソースとデバイス非依存リソースがある。デバイス依存リソースはデバイスがロストしたら再作成する必要がある。 分類してみた。 デバイス依存リソース ID2D1BitmapBrush ID2D1Bitmap ID2D1BitmapRenderTarget ID2D1Grad…

Direct2Dの紹介

昨日Direct2Dがイミディエイトモードってなんだ?Direct3Dの古いバージョンにはあったけど今は無いとか書いたけど、誤りであったようだ。Direct3D6.1以前はイミディエイト・モードとリテインド・モードと言うのがあり、前者はプリミティブ描画のみで低レベル…

MSDN Direct2Dの日本語訳

MSDN Direct2D API がとうとう日本語化された。しかし、読みにくい。。 http://msdn.microsoft.com/ja-jp/library/dd370990(v=VS.85).aspx 次は「Direct2D について」の引用。 Direct2D は、ハードウェア アクセラレータによる、イミディエイト モードの 2-D…

STed2いじり(19) Direct2D化

今日は文字描画まわりをDirect2D化した。 文字表示はできるようになったが、まだまだ完成度は低い。

STed2いじり(18) Direct2D化

一気にコードを変更しようとしたけど、モチベーションが続かない。 目に見える成果をこまかく確認しないとモチベーションが落ちていく性格なので。 すこしずつ動かしてはチェックできるように、GDIコードをコメントアウトしてコンパイルが通るようにした。 …

STed2いじり(17) Direct2D化

ほとんど進んでいない。 テキストVRAM操作部分をいじっているがX68kのText VRAMの構造がぼんやりとしかわかってないので、理解が遅い。朝の快速電車の中、家に帰ったらX68kのドキュメントを漁ってみることにしようかとか思っていて、 家に帰ると手をつけよう…

STed2いじり(16) Direct2D化

実装をのらりくらりと進めている。 今日はCSTedScreenWin32::TextXBox()をDirect2D化した。 マスク処理については自分の中では整理出来たつもりだったのだが、やはり混乱をしてしまう。 頭悪いなあ。

STed2いじり(15) Direct2D化

ビットマップが透過されるか念のため確認。結果は御覧の通り。 グラデーションブラシで書いた文字の上に、ビットマップに「ビットマップ」という文字を書いてDrawBitmap()した。 std::wstring td2d(L"DWR こんにちは"); // グラデーションブラシでHwndRender…

STed2いじり(14) Direct2D化

すこしずつDirect2D化を進めている。 昨日は下記コードのDirect2D化について考えていた。 // public void CSTedScreenWin32::Paint(RECT *in_rect) { int x,y; int w,h; x = in_rect->left; y = in_rect->top; w = in_rect->right-x; h = in_rect->bottom-y;…

STed2いじり(13) Direct2D化

DirectWriteいじりもそこそこにして、Sted2のコードをDirect2D化し始めた。 DirectWriteも奥が深いというかフォント自体奥が深いので自分のやりたいことを見失いそうだ。疑問に感じたらまたDirectWrite調べをすることにして、STed2のコードいじりを進めるこ…

STed2いじり(12) Direct2D化

DirectWriteのドキュメントを休憩中に読んでいたりした。しかしフォントというものは私にとってなんとなく難しい。グリフって何?とかいうレベルなので。なかなか頭に入らない。 そういうわけでSTed2の実装に入る前にDirectWrite APIを学ぶと同時にGDIのフォ…

シューティングゲーム(19)D2DとD3D11を共存させる?

下記記事を参考に、D2DとD3D11を共存させるべくようやくコードを書き始めた。 Surface Sharing Between Windows Graphics APIs - MSDN http://msdn.microsoft.com/en-us/library/ee913554(VS.85).aspx 自分にとって興味のある2点ほど抜き出し要約(要訳?)…

The Graphimation Framework

Direct2DとDirecWriteを使ったアニメーションフレームワークだそうだ。 Animated 2D Graphics for UI, Games, and Demos http://blogs.msdn.com/directx/archive/2009/12/12/animated-2d-graphics-for-ui-games-and-demos.aspx どこが気に入ったかというと下…

シューティングゲーム(10)Direct2D + Direct3D11

3D部分を10.1→11ベースにしようとチャレンジしたのだけれど、D3D11のSwapChainのバックバッファをDirect2Dのrender targetにしようとしたら、E_NOINTERFACEでエラーとなってしまう。 調べてみると、どうもダメなようだ。 なんでダメかも書いてあるが、まだち…

シューティングゲーム(8)Sprite描画

SpriteをDirect2Dで実装して、fiberで動かそうとしているところ。 「PNGビットマップをID2D1Bitmapにロードする」コードを書くのが面倒くさいなぁと思っていたら、WICを使ったサンプルコードがあった。 ・How to Load a Bitmap from a File - MSDN http://ms…

シューティングゲーム(1)Direct3Dプリミティブの描画

Direct3D 10 + Direct2Dを使ってシューティングゲームを作ろうとしている。 今はDirect3Dを使って、チュートリアルを見ながら勉強しているところ。 とりあえずプリミティブを描画できたところまでの画面はこれ。

Direct2D入門

Direct2D入門。よくまとまっている。こういうページを見ると尊敬する。 http://www.tkzdev.net/ Direct2DとGDIの描画速度の違い。 http://zoome.jp/pcuser/diary/14