因为dFdx必须涵盖每一个案例,
我认为它必须像这个伪代码一样实现:
vecN dFdx( vecN )
{
wait_for_other_to_reach_here();
return calculate_difference();
}
Run Code Online (Sandbox Code Playgroud)
但是看,如果我们通过单变量变量,它就很简单了.因为变化会插入线性.
示例片段着色器:
in vec3 v_vertex;
void main()
{
// it must be same result for all fragments in one triangle
vec3 dx = dFdx( v_vertex );
vec2 dy = dFdy( v_vertex );
vec3 normal = normalize( cross( dx , dy ) );
....
....
}
Run Code Online (Sandbox Code Playgroud)