已知一个方法 float verticalDistance(float3 p,surface s)返回点到面的垂直距离. 设 射线ray 与 surface s 交于点 P,则s 在 P点的法线为:设float a= 0.0001f
float x = verticalDistance(float3(p.x+a,p.y,p.z),s)-verticalDistance(float3(p.x-a,p.y,p.z),s);
float y = verticalDistance(float3(p.x,p.y+a,p.z),s)-verticalDistance(float3(p.x,p.y-a,p.z),s);
float z = verticalDistance(float3(p.x,p.y,p.z+a),s)-verticalDistance(float3(p.x,p.y,p.z-a),s);
normal = normalize( float3(x,y,z));
这个算法是可行的 但是为什么这样计算?有哪位大神可以给推荐一下相关算法么?