0
像往常一样在此先感谢..像素弯曲法线图
我使用像素弯曲机为基于高度图的地形生成照明效果。我想制作一张正常的地形地图,并从那里在每个法线上针对特定的太阳方向进行打点。非常标准的东西,但像素弯曲不是很好玩。我有这个代码:
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
是正常化,这不应该输出全蓝色?
我做错了什么?!?
确实[this](http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&extid=1817528)有帮助吗? – 2013-03-11 10:09:32
谢谢,看看这个人是怎么做的,这是一个很好的阅读和有趣的事情;然而,它产生的图像仍然是全蓝色(或者,正常情况下,z = 1.0)由于'v1'和'v2'是单位矢量,因此我认为'n'将是一个单位矢量, v1.z'或'v2.z'不是零,'nz'不应该是1? 我在这里错过了什么? – Pez 2013-03-11 20:40:29