|
|
刚静下心来搞搞shader,是不是shader的全局参数一定要参与output里面的计算,否则程序里面就不能够获取全局参数?
以下是个很基本的漫反射着色的shader
matrix ViewMatrix;
matrix ViewProjMatrix;
vector AmbientMtrl;
vector DiffuseMtrl;
vector LightDirection;
vector DiffuseLightIntensity = {0.0f, 0.0f, 1.0f, 1.0f};
vector AmbientLightIntensity = {0.0f, 0.0f, 0.2f, 1.0f};
struct VS_INPUT
{
vector position : POSITION;
vector normal : NORMAL;
};
struct VS_OUTPUT
{
vector position : POSITION;
vector diffuse : COLOR;
};
VS_OUTPUT Main(VS_INPUT input)
{
// zero out all members of the output instance.
VS_OUTPUT output = (VS_OUTPUT)0;
output.position = mul(input.position, ViewProjMatrix);
LightDirection.w = 0.0f;
input.normal.w = 0.0f;
LightDirection = mul(LightDirection, ViewMatrix);
input.normal = mul(input.normal, ViewMatrix);
float s = dot(LightDirection, input.normal);
if( s < 0.0f )
s = 0.0f;
output.diffuse = (AmbientMtrl * AmbientLightIntensity) +
(s * (DiffuseLightIntensity * DiffuseMtrl));
//我如果把这里的s该成0.1f,随便的一个数,也就是屏蔽了光照的计算,那么程序里面的LightDirection就无法通过GetConstantByName获取了
return output;
}
|
|