Tôi thực sự thất vọng vì cbufer của tôi không cập nhật. Đây là VS của tôi:
cbuffer MatrixBuffer: register(b0)
{
float4x4 worldViewProj;
};
struct VertexIn
{
float4 Pos : POSITION;
float4 Color: COLOR;
};
struct PixelIn
{
float4 PosH : SV_POSITION;
float4 Color: COLOR;
};
PixelIn VS (VertexIn vin)
{
PixelIn vout;
vin.Pos.w = 1.0f;
vout.PosH = mul(vin.Pos, worldViewProj);
vout.Color = vin.Color;
return vout;
}
PixelIn VS1(VertexIn vin)
{
PixelIn vout;
vin.Pos.w = 1.0f;
vout.PosH = vin.Pos;
vout.Color = vin.Color;
return vout;
}
Khi sử dụng VS1, nó vẽ chính xác, nhưng khi sử dụng VS, nó không vẽ gì cả?
Đây là mã cập nhật CBUFFER của tôi
bool Game::UpdateShaders()
{
HRESULT result;
D3D11_MAPPED_SUBRESOURCE mappedResource;
MatrixBufferType* dataPtr;
worldViewProjM = worldM * viewM * projM;
worldViewProjM = XMMatrixTranspose(worldViewProjM);
result = md3dDeviceContext->Map(mMatrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
if (FAILED(result))
{
MessageBoxW(mMainWnd, L"FAOE:", 0, 0);
return false;
}
dataPtr = (MatrixBufferType*)mappedResource.pData;
dataPtr->worldViewProj = worldViewProjM;
md3dDeviceContext->Unmap(mMatrixBuffer, 0);
int NBuffers = 0;
md3dDeviceContext->VSSetConstantBuffers(0, 1, &mMatrixBuffer);
//md3dDeviceContext->PSSetConstantBuffers(0, 1, &mMatrixBuffer);
return true;
}
Đây là cấu trúc MATRIXBUFFERTYPE của tôi:
struct MatrixBufferType
{
XMMATRIX worldViewProj;
};
Điều này được gọi sau khi tôi xóa chế độ xem stprint sâu của mình và hiển thị chế độ xem mục tiêu. Có ai biết tại sao CBUFFER của tôi không cập nhật không?
Cảm ơn trước.
1
Bạn có chắc vấn đề là không có ma trận? Mã nhìn chung có vẻ đúng để cập nhật CB.
—
Chuck Walbourn
@ChuckWalbourn Ma trận bao gồm một ma trận thế giới, mà tôi đã chỉ định là một ma trận danh tính., Một ma trận chiếu chỉ là XMMatrixPers perspectiveFovLH (0.25 * 3.1415, mClientWidth / mClientHeight, 1.0f, 100.0f); XMStoreFloat4x4 (& projM, proj); và một ma trận View chỉ là XMMATRIX V = XMMatrixLookAtLH (pos, target, up);
—
Daniel Hợp
Tôi thấy cách bạn đang tính toán nó, nhưng trong trình gỡ lỗi, bạn nên kiểm tra các giá trị để đảm bảo chúng hợp lý.
—
Chuck Walbourn
@ChuckWalbourn Làm thế nào tôi có thể làm điều đó?
—
Daniel Hợp