繁体   English   中英

HLSL Pixel Shader 5.0 NdotL照明示例

[英]HLSL Pixel Shader 5.0 NdotL lighting sample

我正在使用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循环让我感到困惑。 我正在将i初始化为常量字符串,并且没有右括号。 同样,for循环中的代码也看起来不正确。 float4结构似乎附加了一个字符串“ saturate”,这也是一个函数吗? 没有适当的右花括号且​​没有分号的函数。

样本代码中似乎有一些错别字,而我正在努力解决这些错别字。 关于在这里应该写些什么的想法?

当我尝试在VS2012中编译代码时,出现以下错误:错误X3017:无法从'const string'隐式转换为'int'

我尝试通过将其更改为来修复for循环代码

for(int i=0, i<2, i++)

我在for循环中得到了一个不同的代码错误:错误X3022:标量,向量或矩阵均应

在此先感谢您的帮助

我终于得到了网站作者的回应。 事实证明,一个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;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM