|
|
水面的顶点高度计算出来以后,我自己按照求导做的,不知道问题出在哪里。。。我的hlsl代码如下:
- float2 EvaluateWave( Wave w, float2 vPos, float time )
- {
- float ldist = sqrt(w.vDir.x * w.vDir.x + w.vDir.y * w.vDir.y);
- float dist = dot(w.vDir , vPos) / ldist;
- float hight = w.fAmp * sin( time * 2 * 3.14 * w.fFreq + dist / (w.fLmd * w.fFreq) ); //Asin(wt + dot(dir,pos) / v)
- float k = w.fAmp / ldist / w.fLmd / w.fFreq * cos( time * 2 * 3.14 * w.fFreq + dist / (w.fLmd * w.fFreq) ); //A/|dir|/L / f * cos(wt + dot(dir,pos) / v)
- float2 ret = float2(hight , k);
- return ret;
- }
- float tx = 0.0f; float bz = 0.0f;
- for( int i = 0; i != 2; i++ )
- {
- float2 ret = EvaluateWave( Waves[i], Pos.xz, fTime); float k = ret.y;
- Out.Pos.y += ret.x;
- tx += k * Waves[i].vDir.x;// / sqrt(Waves[i].vDir.x * Waves[i].vDir.x + Waves[i].vDir.y * Waves[i].vDir.y);
- bz += k * Waves[i].vDir.y;// / sqrt(Waves[i].vDir.x * Waves[i].vDir.x + Waves[i].vDir.y * Waves[i].vDir.y);
- }
- float3 vT = normalize(float3(tx , 2 , 0));
- float3 vB = normalize(float3(0 , 2 , bz));
- float3 vN = cross(vT , vB);
复制代码
可是效果总是觉得不对。。。到底该怎么做呢????
请教高手!!!
|
|