首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试创建水的涟漪效果,但在OpenGL中涟漪变成了方形

尝试创建水的涟漪效果,但在OpenGL中涟漪变成了方形
EN

Stack Overflow用户
提问于 2011-01-06 06:12:16
回答 2查看 2.5K关注 0票数 1

我使用的是我从http://www.gamedev.net/reference/articles/article915.asp得到的水流算法

似乎当我创建一个wave时,它从一个圆圈开始。随着时间的推移,圆圈逐渐消散,并在45度、-45度、45度和-45度处形成线条。因此,它看起来不再像一个波浪,而是一个方形的形状。

这是启动wave的代码:

代码语言:javascript
运行
复制
WaveMapPingc(int x,int y,int rd, int str)
{
    for(float a=0; a<3.14159*2; a+=.1)
    {
        for(int r=1; r<rd;r++)
        {
            //   LowWaveMapPingca(x+(int)((float)r*cos(a)+.5) ,y+(int)((float)r*sin(a)+.5),str );
            WaveMap[CT]
            [x+(int)((float)r*cos(a)+.5)]
            [y+(int)((float)r*sin(a)+.5)]=str;
        }
    }
}

这是生成高度图的代码:

代码语言:javascript
运行
复制
UpdateWaveMap()
{
    int x,y,n;

    int Temporary_Value = CT;
    CT = NW;
    NW = Temporary_Value;

    // { Skip the edges to allow area sampling }
    for(y= 1; y<MAXY-1; y++)
    {
        for(x= 1;x< MAXX-1; x++)
        {
            n = ( WaveMap[CT][x-1][y] +
                  WaveMap[CT][x+1][y] +
                  WaveMap[CT][x][y-1] +
                  WaveMap[CT][x][y+1] ) / 2 -
                WaveMap[NW][x][y];

            float sub=(float)n / DAMP;
            int isub=sub;

            if (n<1 && isub==0)
                n++;
            else 
                if (n>1 && isub==0)
                    n--;
                else
                    n = n-isub;
            WaveMap[NW][x][y] = n;
        } // x
    } // y
} // function
EN

Stack Overflow用户

发布于 2011-01-06 07:42:48

您使用的是整数的位置。这引入了各种量化问题(即顶点位置)。

我想说的是,你可能希望将它保持在浮点数中,以使事情变得平滑。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4609734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档