【发布时间】:2013-07-06 09:37:33
【问题描述】:
像往常一样提前谢谢..
我正在使用像素弯曲器为基于高度图的地形生成光照效果。我想制作地形的法线贴图,并从那里将每个法线点在给定的太阳方向上。确实很标准的东西,但是像素弯曲器玩得不好。我有这个代码:
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 有帮助吗?
-
谢谢,这是一本好书,很有趣,看看这个人是如何做到的;但是它产生的图像仍然是全蓝色的(或者,z = 1.0 正常)由于
v1和v2是单位向量,我希望n将是一个单位向量,并且无论v1.z或v2.z不是零,n.z不应该是 1?我在这里错过了什么?
标签: flash graphics 3d pixel-bender