저는 결과를 변경해서는 안되는 라인을 제외하고 거의 모든 코드를 공유하는 두 개의 셰이더를 만들었습니다. 즉 코드의 공유 부분 :HLSL 셰이더가 작동하지 않습니다.
struct VOut
{
float4 position : SV_POSITION;
float4 color : COLOR;
float4 ld1 : LD;
};
cbuffer LIGHT : register (cb0)
{
float4 light_direction;
float4 light_color;
};
cbuffer TRANSFORMATION_MATRIX : register (cb1)
{
float4x4 transformationMatrix;
};
cbuffer CAM_PROJ_MATRIX : register (cb2)
{
float4x4 cameraProjectionMatrix;
};
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
return color;
}
버텍스 쉐이더가 변경 부분 :
VOut VShader(float3 position : POSITION, float4 color : COLOR)
{
VOut output;
float4 rpos = mul(transformationMatrix,float4(position, 1.0));
output.position = mul(cameraProjectionMatrix, rpos);
*output.ld1 = light_direction;*
output.color = color;
return output;
}
이 사람은 잘 작동하지만 내가 별표 사이의 라인을 변경하는 경우 (분명히 별표 없습니다 실제 코드에서) :
output.ld1 = float4(1.0,1.0,1.0,1.0);
그런 다음 화면에 아무 것도 표시되지 않습니다. 이게 어때요?
''LD''는 표준 의미론이 아니므로 의미가 없습니다. 유효한 인터 스테이지 인터폴 레이터를 얻으려면''TEXCOORD0''을 사용해보십시오. –