我正在使用directX浏览Pixel Shader 5.0的教程。我做得很好,直到我进入第四课,让我用下面的代码创建一个PixelShader.hlsl文件:
cbuffer ConstantBuffer : register( b0 )
{
matrix World;
matrix View;
matrix Proj;
float4 vLightDir[2];
float4 vLightColor[2];
float4 vOutputColor;
}
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float3 Norm : TEXCOORD0;
};
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 main( PS_INPUT input) : SV_Target
{
float4 finalColor = 0;
//do NdotL lighting for 2 lights
for(int i=0; i<2; i=""
{
finalColor += "saturate"( dot=""( (float3)vLightDir=""[i=""],input.Norm="") * vLightColor=""[i=""
}
finalColor.a = "1"
return="" finalColor="";
}
文件末尾的for循环让我感到困惑。 Int i被初始化为常量字符串,并且没有右括号。 同样,for循环中的代码也看起来不正确。 float4结构似乎有一个字符串&#34; saturate&#34;附加到它,这也是一个功能?没有正确关闭括号且没有分号的函数。
示例代码中似乎存在一些拼写错误,我正在努力修复它们。关于应该在这里写什么的任何想法?
当我尝试在VS2012中编译代码时,我收到以下错误:错误X3017:无法隐式转换来自&#39; const string&#39;到&#39; int&#39;
我尝试通过将for循环代码更改为
来修复它for(int i=0, i<2, i++)
我为for循环中的代码得到了一个不同的错误:错误X3022:标量,向量或预期的矩阵
提前感谢您的帮助
答案 0 :(得分:0)
我终于收到了网站作者的回复。结果是一个XML转换器自动格式化了代码示例并弄乱了一些东西。这是正确的代码:
cbuffer ConstantBuffer : register( b0 )
{
matrix World;
matrix View;
matrix Proj;
float4 vLightDir[2];
float4 vLightColor[2];
float4 vOutputColor;
}
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float3 Norm : TEXCOORD0;
};
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 main( PS_INPUT input) : SV_Target
{
float4 finalColor = 0;
//do NdotL lighting for 2 lights
for(int i=0; i<2; i++)
{
finalColor += saturate( dot( (float3)vLightDir[i],input.Norm) * vLightColor[i] );
}
finalColor.a = 1;
return finalColor;
}