Tôi có trình đổ bóng pixel chỉ cần chuyển màu nhập thông qua, nhưng thay vào đó tôi nhận được kết quả không đổi. Tôi nghĩ cú pháp của tôi có thể là vấn đề. Đây là trình đổ bóng:Chuyển màu thông qua trình đổ bóng pixel trong HLSL
struct PixelShaderInput
{
float3 color : COLOR;
};
struct PixelShaderOutput
{
float4 color : SV_TARGET0;
};
PixelShaderOutput main(PixelShaderInput input)
{
PixelShaderOutput output;
output.color.rgba = float4(input.color, 1.0f); // input.color is 0.5, 0.5, 0.5; output is black
// output.color.rgba = float4(0.5f, 0.5f, 0.5f, 1); // output is gray
return output;
}
Để thử nghiệm, tôi có trình đổ bóng đỉnh đứng trước trong đường đi qua tham số COLOR 0,5, 0,5, 0,5. Bước qua các điểm ảnh shader trong VisualStudio, input.color có giá trị chính xác, và đây đang được assinged để output.color một cách chính xác. Tuy nhiên khi được hiển thị, các đỉnh sử dụng đổ bóng này đều có màu đen.
Đây là đỉnh mô tả yếu tố shader:
const D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
Tôi không chắc chắn nếu điều quan trọng là các vertex shader có màu sắc như RGB kết quả đầu ra như nhau, nhưng các kết quả đầu ra pixel shader RGBA. Lớp alpha hoạt động chính xác ít nhất.
Nếu tôi nhận xét bài tập đầu tiên, bài tập sử dụng input.color và bỏ ghi chú khác, với giá trị rõ ràng, thì pixel được hiển thị có màu xám (như mong đợi).
Mọi ý tưởng về những gì tôi đang làm sai ở đây?
Tôi đang sử dụng mô hình trình đổ bóng 4 cấp 9_1, với bật tối ưu hóa và bật thông tin gỡ lỗi.
Cảm ơn Yeti. Khởi tạo float4 mà tôi có ở đó, tôi đã lấy trực tiếp từ mẫu Direct3D đi kèm với VS2012. Tôi đã cố gắng thay đổi một trong những bạn đề cập đến nhưng tôi nhận được kết quả tương tự. –
Tôi đã sửa đổi mã của mình sao cho khai báo đỉnh bây giờ có màu như DXGI_FORMAT_R32G32B32A32_FLOAT và tôi đã sửa đổi các trình đổ bóng để lấy và trả về float4 thay vì float3, nhưng không thay đổi đầu ra. –
float4 (float3, 1.0f); là đúng cú pháp HSLS, nhưng tôi không thể tìm thấy tài liệu msdn trên đó. – Stardidi