我尝试更改“float4 Color:COLOR1”,但没有帮助,因为它适用于漫反射或镜面反射颜色。我不知道还能做什么,我不知道要添加什么。
我的想法用完了。
HRESULT GenerateShader(ID3D11Device* pD3DDevice, ID3D11PixelShader**pShader, float r, float g, float b)
{
char szCast[] = "struct VS_OUT"
"{"
" float4 Position : SV_Position;"
" float4 Color : COLOR0;"
"};"
"float4 main( VS_OUT input ) : SV_Target"
"{"
" float4 fake;"
" fake.a = 0.5f;"
" fake.r = %0.2f;"
" fake.g = %0.2f;"
" fake.b = %0.2f;"
" return fake;"
"}";
ID3D10Blob* pBlob;
char szPixelShader[1000];
sprintf(szPixelShader, szCast, r, g, b);
ID3DBlob* d3dErrorMsgBlob;
HRESULT hr = D3DCompile(szPixelShader, sizeof(szPixelShader), "shader", NULL, NULL, "main", "ps_4_0", NULL, NULL, &pBlob, &d3dErrorMsgBlob);
if (FAILED(hr))
return hr;
hr = pD3DDevice->CreatePixelShader((DWORD*)pBlob->GetBufferPointer(), pBlob->GetBufferSize(), NULL, pShader);
if (FAILED(hr))
return hr;
return S_OK;
}
答案 0 :(得分:0)
您似乎已从此处获取代码:GenerateShader for DirectX11
拥有"%"登录原始代码:
fake.r = %f;
fake.g = %f;
fake.b = %f;
是稍后使用 sprintf 和参数 r,g,b 编辑着色器。
sprintf(szPixelShader, szCast, r, g, b);
所以写%0.2f 没有意义。如果您想要硬编码的颜色值,请尝试删除"%"在您的代码中签名,所以它将如下所示:
fake.r = 0.2f;
fake.g = 0.2f;
fake.b = 0.2f;
对 sprintf 的调用是不必要的(并且会因为目标字符串没有参数来打印rgb值而产生错误)。
有关sprintf的更多信息。