像往常一样提前谢谢..
我正在使用像素弯曲器为基于高度图的地形生成照明效果。我想制作地形的法线贴图,并从那里将每个法线点在给定的太阳方向上。确实很标准的东西,但是像素弯曲器玩得不好。我有这个代码:
void
evaluatePixel()
{
float2 pt = outCoord();
pixel3 a = sampleNearest(src,pt);
pixel3 b = sampleNearest(src,float2(pt.x + 1.0, pt.y));
pixel3 c = sampleNearest(src,float2(pt.x, pt.y + 1.0));
float3 v1 = float3(1.0, 0.0, b.r - a.r);
float3 v2 = float3(0.0, 1.0, c.r - a.r);
normalize(v1);
normalize(v2);
float3 n = cross(v1,v2);
dst = pixel3(n.x,n.y,n.z);
}
我希望这会产生一个法线贴图。为了进行测试,我假设光线直接指向下方并仅用n.z
作输出颜色。这会产生纯色。如果您使用上面的代码并运行它,您会看到虽然红色和绿色有变化,但蓝色总是在 255 处充满。这是为什么呢?我希望考虑v1
并v2
规范化这不应该总是输出全蓝色?
我究竟做错了什么?!?