위치를 저장하는 버퍼와 색만 저장하는 2 개의 정점 버퍼를 만들려고합니다. 이것은 프랭크 루나 (Frank Luna)의 책에서 버텍스 설명, 레이아웃 및 버퍼 옵션에 익숙해지기위한 연습 일뿐입니다. 문제는 필자가 모든 관련 변경 사항을 적용한 것처럼 느껴지고 형상을 표시하려고해도 색상 버퍼가 작동하지 않는다는 것입니다. 연습을 완료하려면 각 Vertex가 위치와 색상을 저장하는 예제 코드에서 책의 Vertex vertices [] = {{...}, {...}, ...} 대신 XMFLOAT3을 사용하고 있습니다. 위치 및 XMFLOAT4 색상 [] = {a, b, c, ...}에 대해 pos [] = {x, y, z ...}. I는 대신 이전에 기초한 자원이었다 단지 mBoxVB 두 정점 버퍼를 기대하는 장치에 정점 버퍼를 변경 한Direct3D 다중 정점 버퍼, 비 인터리브 요소
D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}
};
: I는 각 요소는 정확한 입력 지점을 참조하도록, 정점 정보를 수정 정점 정점 [] :
가ID3D11Buffer* mBoxVB;
ID3D11Buffer* mBoxVBCol;
ID3D11Buffer* combined[2];
...
combined[0]=mBoxVB;
combined[1]=mBoxVBCol;
...
UINT stride[] = {sizeof(XMFLOAT3), sizeof(XMFLOAT4)};
UINT offset = 0;
md3dImmediateContext->IASetVertexBuffers(0, 2, combined, stride, &offset);
도움의 경우,이 버퍼 생성 코드이다
D3D11_BUFFER_DESC vbd;
vbd.Usage = D3D11_USAGE_IMMUTABLE;
vbd.ByteWidth = sizeof(XMFLOAT3)*8;
vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vbd.CPUAccessFlags = 0;
vbd.MiscFlags = 0;
vbd.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA vinitData;
vinitData.pSysMem = Shapes::boxEx1Pos;
HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mBoxVB));
D3D11_BUFFER_DESC cbd;
vbd.Usage = D3D11_USAGE_IMMUTABLE;
vbd.ByteWidth = sizeof(XMFLOAT4)*8;
vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vbd.CPUAccessFlags = 0;
vbd.MiscFlags = 0;
vbd.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA cinitData;
cinitData.pSysMem = Shapes::boxEx1Col;
HR(md3dDevice->CreateBuffer(&vbd, &cinitData, &mBoxVBCol));
I 조합 사용하면 [0] = mBoxVBCol 대신 콤비 ned [0] = mBoxVB 다른 모양이있어서 거기에 데이터가 있다는 것을 알았지 만 Color 요소가 버텍스 쉐이더로 전송되지 않는 이유를 모르겠습니다. 두 번째 슬롯이 무시되고있는 것처럼 보입니다. 수술 중.
쉐이더 소스도 게시 할 수 있습니까? – PDizzle745
지연 시간 동안 미안 하나의 버텍스 버퍼를 사용할 때 셰이더가 정상적으로 작동했습니다. 문제를 발견하고 게시했습니다. –