ピクセルシェーダを使用しているだけで、入力カラーを渡す必要がありますが、代わりに一定の結果が得られます。私は私の構文が問題かもしれないと思う。ここでシェーダは: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;
}
は試験のために、私は0.5、0.5、0.5の色パラメータを渡すpiplelineでこれを先行する頂点シェーダを有します。 VisualStudioのピクセルシェーダーを実行すると、input.colorは正しい値を持ち、これらはoutput.colorに正しくアサインされています。しかし、レンダー時には、このシェーダを使用する頂点はすべて黒です。私はそれが頂点シェーダは、RGBが同じ出力と色がかかりますが、ピクセルシェーダ出力のRGBAことが重要だかはわからない
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 },
};
:ここ
は、頂点シェーダ要素の説明です。アルファ層は少なくとも正しく動作しています。
最初の割り当てをコメントアウトすると、input.colorを使用し、明示的な値で他の割り当てのコメントを解除すると、レンダリングされたピクセルは灰色(期待どおり)になります。
私がここで間違っていることに関するアイデアはありますか?
私は、シェーダーモデル4レベル9_1を使用しています。最適化を無効にし、デバッグ情報を有効にしています。
ありがとうYeti。私がそこに持っているfloat4の初期化は、VS2012に同梱されているDirect3Dサンプルから直接取ったものです。私はあなたが言及しているものに変更しようとしましたが、同じ結果を得ています。 –
頂点宣言の色がDXGI_FORMAT_R32G32B32A32_FLOATに変更され、浮動小数点数をfloat3ではなくfloat4を返すように変更しましたが、出力に変更はありません。 –
float4(float3、1.0f);正しいHSLS構文ですが、MSDNのドキュメントが見つかりません。 – Stardidi