2014-08-29 5 views
0

나는 directX를 사용하는 Pixel Shader 5.0에 대한 튜토리얼을 진행할 것입니다.HLSL 픽셀 쉐이더 5.0 NdotL 조명 샘플

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=""; 
    } 

루프에 대한 파일의 끝에 나를 혼란이있다 : 나는 내가 다음 코드와 PixelShader.hlsl 파일을 만들 수있는 네 번째 교훈에 도착하기 전까지는 벌금을하고 있었다. Int i는 상수 문자열로 초기화되고 닫는 괄호가 없습니다. 마찬가지로 for 루프 내의 코드도 올바르지 않게 보입니다. float4 구조체에 "saturate"라는 문자열이 추가 된 것처럼 보입니다.이 문자열은 함수이기도합니다. 적절한 중괄호가없고 세미콜론도없는 함수.

샘플 코드에 몇 가지 오타가있는 것처럼 보입니다. 문제를 해결하기 위해 고심하고 있습니다. 여기에 무엇을 써야하는지에 대한 생각은 무엇입니까?

내가 VS2012에서 코드를 컴파일 할 때, 나는 다음과 같은 오류 얻을 : 오류 X3017 : 암시 내가로 변경하여 루프에 대한 코드를 수정 시도 'INT'

에 'const를 문자열'에서 변환 할 수 없습니다

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

내가 for 루프 내 코드에 다른 오류가 발생합니다 : 오류 X3022을 : 스칼라, 벡터 또는 매트릭스 당신의 도움이

답변

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; 
    }