float4x4 matInvViewProj;
float4 GetPointPosition(float2 Tex0)
{
float4 PosImageSpace;
PosImageSpace.xy = float2(Tex0*2-1);
PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
return mul(PosImageSpace,matInvViewProj);
}
这是我的像素着色器的一部分。为什么会出现编译错误? 我正在编译它
ps_3_0.
没有 mul()
它可以编译。
啊,我想这是有道理的。由于 w 组件未初始化,mul() 函数将失败。
为了避免这种情况,您可以按如下方式初始化向量:
float4 PosImageSpace = (float4)0;
我仍然建议您尝试在调试模式下使用 fxc 编译着色器,因为这样您可以获得更好的错误描述。您甚至可以设置自定义构建步骤,让您右键单击 .fx 文件并编译它,而无需编译整个解决方案/项目。
要在调试配置中使用 fxc 编译着色器:
fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx
您可以在 C:\Program Files\Microsoft DirectX SDK\Utilities 中找到 fxc
要在 Visual Studio 中设置自定义构建步骤 请从 DirectX SDK 检查此示例,还要检查此站点
另请查看msdn 上的这篇文章有关使用 fxc 的信息。
PosImageSpace.w = 0.0f;
现在编译得很好。 这就是现在的样子:
float4x4 matInvViewProj;
float4 GetPointPosition(float2 Tex0)
{
float4 PosImageSpace;
PosImageSpace.xy = float2(Tex0*2-1);
PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
PosImageSpace.w = 0.0f;
return mul(PosImageSpace,matInvViewProj);
}