do this に必要な頂点バッファーは 1 つだけです。
これができることです。三角形の情報を保持する配列/ベクトルを作成できます。たとえば、(疑似コード)
struct TriangleInfo{
..... texture;
vect2 pos;
vect2 dimension;
float rot;
}
次に、描画方法で
for(int i=0; i < vector.size(); i++){
TriangleInfo tInfo = vector[i];
matrix worldMatrix = Transpose(matrix(tInfo.dimension) * matrix(tInfo.rot) * matrix(tInfo.pos));
shaderParameters.worldMatrix = worldMatrix; //info to the constabuffer
..
..
dctx->PSSetShaderResources(0, 1, &tInfo.texture);
dctx->Draw(0,4);
}
次に、頂点シェーダーで次のようにします。
cbuffer cbParameters : register( b0 ) {
float4x4 worldMatrix;
};
VOut main(float4 position : POSITION, float4 texCoord : TEXCOORD)
{
....
output.position = mul(position,worldMatrix);
...
}
すべてが疑似コードであることを思い出してください。しかし、これでアイデアが得られるはずですが、三角形をたくさん作成しようとしている場合、たとえば 1000 個の三角形を作成する場合は問題があります。これは最適なオプションではない可能性があります。DrawIndexed を使用して変更する必要があります。各三角形の頂点位置、または DrawInstanced を使用することができます。これはより単純で、すべての情報を 1 回の Draw 呼び出しで送信できます。