我已经完全重写了第一篇文章,以更好地说明问题所在。
我正在使用 ps v1.4(我支持的最高版本)并不断收到错误消息。
每当我对传递到像素着色器的东西使用任何类型的函数(例如 cos、dot、distance、sqrt、normalize 等)时,都会发生这种情况。
例如,我需要执行“normalize(LightPosition - PixelPosition)”来在我的像素着色器中使用点光源,但 normalize 会给我一个错误。
需要注意的一些事情——
我可以使用 pow、abs 和弧度之类的东西而不会出错。
如果对从顶点着色器传递的某些内容执行此操作,则只会出现错误。(例如,我可以毫无错误地获取本地像素着色器变量的 sqrt)
我通过对传入的任何变量执行函数得到错误,甚至是文本坐标、颜色等。
在顶点着色器中,我可以对传入的任何变量执行所有这些函数而不会出现错误,只有在像素着色器中才会出现错误
从顶点到像素着色器的所有值都是正确的,因为如果我使用软件处理而不是与硬件相比,我没有错误,并且场景光线充足。
由于归一化向量本质上是我的错误出现的地方,因此我尝试创建自己的归一化函数。
我调用 Norm(LightPosition - PixelPosition) 并且“Norm”看起来像这样 -
float3 Norm(float3 v)
{
return v / sqrt(dot(v, v));
}
我仍然收到错误,因为我想从技术上讲我仍在尝试在像素着色器中使用 sqrt。
该错误不是什么具体的,它只是在我在 C# 中加载我的 .fx 文件的行上说“应用程序中的错误”
我认为它实际上可能是一个编译错误,因为我必须使用这样的旧版本(vs 1.1和 ps 1.4)
当使用 fxc.exe 进行调试时,它告诉我“无法将指令映射到像素着色器指令集”