2017-11-27 23 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에서이 코드는 사용자가이 코드에서 설정하지 않은 래스터 라이저 상태로 제어됩니다. 설정하지 않은 기본 상태는 CullMode이며 D3D11_CULL_BACK이고 FrontCounterClockwiseFALSE으로 설정됩니다.

컬 모드를 "없음"으로 설정하는 래스터 라이저 상태 오브젝트를 생성하고 설정해보십시오. 당신은 다이렉트 X 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 자습서를 살펴 보셔야합니다.