はかせのラボ

私の頭の中を書いていく雑記ブログです

DirectX線を出してみよう

前回でようやっとシェーダーをコンパイルし点を描画することができました。
点を描画したならば次は線ですよね。ということで出してみます。

といっても変わるのは、
描画する頂点データの数、それに伴う頂点バッファの確保量
そして頂点データの解釈するタイプだけです。

基本的にDirectXはデバイスを初期化して、パラメータをセットし、
あとは毎フレーム画面の情報を更新して切り替えるだけです。

結局デジタルの動くものはパラパラ漫画と同じ原理で動いているわけですね。

なので最初が異様にめんどくさいだけでその部分さえ乗り越えれば
あとはちょこちょこ改造を繰り返せば
なんとなくそれっぽいものが出来上がってきます。
(まだまだ勉強し始めたばかりなのでもしかしたらちがうかもしれません。)

では本題です。

最初に頂点データ周りの部分を改造しましょう。

//頂点の座標
VERTEX vertex[] = {
	XMFLOAT3(-0.2f, 0.5f, 0.0f),
	XMFLOAT3(0.2f, 0.5f, 0.0f),
};
D3D11_BUFFER_DESC bd;
bd.ByteWidth = sizeof(VERTEX) * 2;

//描画 Draw関数の第一引数が描画する頂点数らしい
mDeviceContext->Draw(2, 0);

前回までは一つしかなかった頂点データを二つにし
確保する領域を二つ分にしただけです。

そして渡す頂点データの数が増えたので描画する頂点数も増やしてあげます。
Draw関数は第一引数に描画する頂点数を渡すそうです。
これが前回と同じ1のままだと一つしか頂点を描画しないので線になりません。

次に頂点データの解釈を変えてあげます。
この解釈の仕方でどのように描画されるか決定されるみたいです。
D3D11_PRIMITIVE_TOPOLOGYというenumを設定することによって
渡された頂点データの解釈を変えることができるそうです。

前回使用したD3D11_PRIMITIVE_TOPOLOGY_POINTLISTでは
渡された頂点データを点のリストとして解釈するそうです。

今回は線を描画したいのでこの解釈を線のリストにしたいです。
線として解釈させるためには
D3D11_PRIMITIVE_TOPOLOGY_LINELISTを設定してあげればいいみたいです。

mDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST);

これで線を描画できるようになったはずです
実行してみます。

↓実行結果
f:id:hakase0274:20180902194903p:plain
無事白い直線が出ました。

次は三角形の描画ですかね。
三角形を描画出来たらポリゴン作れますもんね。
ポリゴン作れたらあとはもう何でも出したい放題ですよね。
がんばります。

今回作ったものはgithubに上げました
https://github.com/hakase0724/DirectX/tree/master