Nanashi-softプログラマ専用DirectX11開発


◇DirectX11プログラミング -モデルデータを増やしたい-

急にタイトルを変えましたが,後で検索しやすいようにする為です

物体を置くのは良いのですが,同じ物体を複数回読み込むのは非効率です
同じモデルデータをコピーできないのか?

増やす,と考えるのでは無く,同じものを2回描画すると考えるとできました
描画する時に,コピーする命令に置き換えます
				hpDeviceContext->DrawIndexed(hModelData->getIdxCnt(mdcnt), hModelData->getIdxSta(mdcnt), 0);
↓インスタンスを生成して描画に変更
				hpDeviceContext->DrawIndexedInstanced(hModelData->getIdxCnt(mdcnt), 1, 0, hModelData->getIdxSta(mdcnt), 0);
これで,同じバッファを指定して描画命令を出しても上書きされません

モデルデータクラスにコピーするメソッドを追加します
・modeldata.h
	//オブジェのコピーを生成(オブジェ番号が返る)
int cpyObj(int);
・modeldata.cpp
	//オブジェのコピーを生成(オブジェ番号が返る)
int modeldata::cpyObj(int hObjNum){
//次のオブジェ番号を取得
int hObjNumNew = getObjMax();

//指定したオブジェが属するモデルデータを探してコピーする
for(int mdcnt=0; mdcnt < getMaxModelId(); mdcnt++){
if(objNum[mdcnt] == hObjNum){
//モデルデータ保管を生成
int hModelId = newData();

//オブジェ番号をセット
setObjNum(hModelId, hObjNumNew);

//コピーする
drawYes[hModelId] = drawYes[mdcnt];
idxCnt[hModelId] = idxCnt[mdcnt];
idxSta[hModelId] = idxSta[mdcnt];
vctCnt[hModelId] = vctCnt[mdcnt];
texCnt[hModelId] = texCnt[mdcnt];
texSta[hModelId] = texSta[mdcnt];
psNum[hModelId] = psNum[mdcnt];
vctBufNum[hModelId] = vctBufNum[mdcnt];
idxBufNum[hModelId] = idxBufNum[mdcnt];

}
}

return hObjNumNew;
}
あとは,メインプログラムで増やせばいいだけです

・main.cpp
	//モデルデータを増やす
{
//2番のオブジェを1000コ増やす
for(int i=0; i < 1000; i++){
hModelData->cpyObj(2);
}
}


TOPプログラマ専用DirectX11開発