プログラミング ジオメトリインスタンシング⑥
あいさつ
どうも、はかせです。
進捗は相変わらずさっぱりですが
今日も今日とてジオメトリインスタンシングの勉強です。
やったこと
前回の記事で色々サンプルを見て得た知見をメモしましたが、
今回は一つ目の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); /*以下略*/
そして結果です。
むしろ悪化しましたねw
とりあえず理解している理屈とサンプルで見たコードを
それとなく混ぜて落としてみたんですけどダメでした。
あとがき
今回はサンプルを参考にやってみたらむしろ悪化した話でした。
私のブログ史上最高に沼ってますw
そして私のことだから
すごくしょうもないミスがありそうな雰囲気がしますw
まぁ愚痴ってる暇があるなら手を動かせですよね、わかってます。
それでは今回はこの辺でノシ