はかせのラボ

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

プログラミング ジオメトリインスタンシング⑥

あいさつ

どうも、はかせです。
進捗は相変わらずさっぱりですが
今日も今日とてジオメトリインスタンシングの勉強です。

やったこと

前回の記事で色々サンプルを見て得た知見をメモしましたが、
今回は一つ目のBufferの更新をやってみました。

理屈としてジオメトリインスタンシングを行うためには
①共通データ
インスタンス毎のデータ

この二つが必要です。

共通データは最初に作ったやつをそのまま使うとして
インスタンス毎のデータは描画するのに必要な行列データです(多分)

なのでそんな感じでセットしてみました。

//生成するインスタンス数
int instanceNum = 10;
//パイプライン構築
UINT stride[2];
stride[0] = sizeof(TEXTURE_VERTEX_DATA);
stride[1] = sizeof(DirectX::XMMATRIX);
UINT offset[2] = {0,0};
ID3D11Buffer* buffer[2];
buffer[0] = mVertexBuffer;
//インスタンス毎のデータバッファを作成
D3D11_BUFFER_DESC bd;
bd.ByteWidth = sizeof(DirectX::XMMATRIX) * instanceNum;
bd.Usage = D3D11_USAGE_DYNAMIC;
//頂点バッファとしてバインド
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
bd.MiscFlags = 0;
bd.StructureByteStride = 0;
//定数バッファに入れていた行列情報をサブリソースに格納
D3D11_SUBRESOURCE_DATA data;
data.pSysMem = &mDXCamera->GetDXCameraParam(transform);
mDXManager->GetDevice()->CreateBuffer(&bd, &data, &buffer[1]);
//頂点バッファを設定
mDeviceContext->IASetVertexBuffers(0, 2, &mVertexBuffer, stride, offset);
/*以下略*/

そして結果です。
f:id:hakase0274:20190528231604p:plain

むしろ悪化しましたねw

とりあえず理解している理屈とサンプルで見たコードを
それとなく混ぜて落としてみたんですけどダメでした。

あとがき

今回はサンプルを参考にやってみたらむしろ悪化した話でした。
私のブログ史上最高に沼ってますw

そして私のことだから
すごくしょうもないミスがありそうな雰囲気がしますw

まぁ愚痴ってる暇があるなら手を動かせですよね、わかってます。
それでは今回はこの辺でノシ