2017-11-27 13 views
0

2つの三角形が表示されるようにしようとしていますが、プログラムは最初の三角形の座標のみを読み込むため、最初の三角形のみが表示されます。私は問題が何であるか分かりません。助けてくださいdirectxに2つの三角形を表示する11

static const Vertex s_vertexData[] 
{ 
    XMFLOAT3{ 0.0f, 0.5f, 0.5f }, 
    XMFLOAT3{ 0.5f, -0.5f, 0.5f }, 
    XMFLOAT3{ -0.5f, -0.5f, 0.5f }, 
    XMFLOAT3{ 1.0f, 0.5f, 0.5f }, 
    XMFLOAT3{ 1.5f, -0.5f, 0.5f }, 
    XMFLOAT3{ 0.6f, -0.5f, 0.5f }  
}; 


D3D11_BUFFER_DESC bd; 
ZeroMemory(&bd, sizeof(bd)); 
bd.Usage = D3D11_USAGE_DEFAULT; 
bd.ByteWidth = sizeof(s_vertexData); 
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER; 
bd.CPUAccessFlags = 0; 
D3D11_SUBRESOURCE_DATA InitData; 
ZeroMemory(&InitData, sizeof(InitData)); 
InitData.pSysMem = s_vertexData; 
hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pVertexBuffer); 
if(FAILED(hr)) 
    return hr; 


// Set vertex buffer 
UINT stride = sizeof(Vertex); 
UINT offset = 0; 
g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset); 

// Set primitive topology 
g_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); 
+0

重要な情報である可能性が高い '' Draw''メソッドへの実際の呼び出しを含めないでください。 –

答えて

1

問題の原因としては、三角形巻きと組み合わせたカリングモードが考えられます。 Wikipedia

DirectX 11では、このコードで設定していないラスタライザの状態によって制御されます。設定しないデフォルトの状態は、CullModeD3D11_CULL_BACKに、FrontCounterClockwiseFALSEに設定されています。

カルテモードを「なし」に設定するラスタライザ状態オブジェクトを作成して設定してみてください。あなたはDirectX 11のに慣れていたよう

ID3D11RasterizerState* g_pRasterState = nullptr; 

... 

CD3D11_RASTERIZER_DESC rasterDesc(D3D11_FILL_SOLID, D3D11_CULL_NONE, 
    FALSE /* FrontCounterClockwise */, 
    D3D11_DEFAULT_DEPTH_BIAS, 
    D3D11_DEFAULT_DEPTH_BIAS_CLAMP, 
    D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS, 
    TRUE /* DepthClipEnable */, 
    FALSE /* ScissorEnable */, 
    TRUE /* MultisampleEnable */, 
    FALSE /* AntialiasedLineEnable */); 

hr = g_pd3dDevice->CreateRasterizerState(&rasterDesc, &g_pRasterState); 
if(FAILED(hr)) 
    return hr; 

... 

g_pImmediateContext->RSSetState(g_pRasterState); 

は、あなたがDirectX Tool Kitチュートリアルを見てみる必要があります。