我在本文中实现了“正弦近似之和”: https://developer.nvidia.com/gpugems/gpugems/part-i-natural-effects/chapter-1- effective-water-simulation-physical-models
我的几何体工作正常,但法线有些错误。它们的 x 和 z 值被翻转,我想知道我在实现中做错了什么。
法线的生成在着色器中看起来像这样:
vec3 generateWaveSineSumNormal(sineParams _params[sineCount])
{
vec2 pos = vec2(aPos.x, aPos.z);
vec3 normal = vec3(0.0f, 1.0f, 0.0f);
for(int i=0; i<sineCount; i++)
{
sinParams curParams = _params[i];
normal.x += sineExponent * curParams.direction.x * curParams.frequency * curParams.amplitude *
pow((sin(dot(curParams.direction, pos) * curParams.frequency + curTime * curParams.speed)+1)/2, sineExponent-1)
* cos(dot(curParams.direction, pos) * curParams.frequency + curTime * curParams.speed);
normal.z += sineExponent * curParams.direction.y * curParams.frequency * curParams.amplitude *
pow((sin(dot(curParams.direction, pos) * curParams.frequency + curTime * curParams.speed)+1)/2, sineExponent-1)
* cos(dot(curParams.direction, pos) * curParams.frequency + curTime * curParams.speed);
}
return vec3(-normal.x, normal.y, -normal.z);
}
当x值和z值像这样翻转时,法线就很好了。我只是想知道我在实现它时做错了什么,因为我找不到它。