照红龙书的diffuse例子抄写了一下,改了一晚上,总结下自己的错误和想法
1.常量表只能修改非静态全局变量,全局变量默认为非静态
2.
hr = D3DXCompileShaderFromFile(
szShaderFileName,
0,
0,
"Main",
"vs_2_0",
D3DXSHADER_DEBUG | D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY,
&shader,
&errorBuffer,
&m_pTransformConstantTable);
据网上的说法,因为此shader版本太低,所以在flag参数上加上D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY兼容旧版本
3.红龙书上shader的写法
LightDirection.w = 0.0f;
input.normal.w = 0.0f;
LightDirection = mul(LightDirection, ViewMatrix);
input.normal = mul(input.normal, ViewMatrix);
书上将光线和法向量转到观察坐标系再计算.而网上的多是转到世界坐标系上计算,并normalize.
4.书写错误