【OpenGL】8字循环体算法

今天在NEHE粒子效果的基础上写了一个8字循环体,果然算法什么的真是太恶心了。

关于粒子效果我就不多说了,大家可以参照NEHE的教程,写得很详细,只要有心,肯定能学会。链接如下:

http://www.owlei.com/DancingWind/

所谓的8字循环体,就是蜜蜂跳的那种8字舞蹈,上下两个圆圈绕着转。

因此,要实现8字循环体,首先得要实现如何画圆圈。

其实很简单,我们先在文件顶头定义一些所需的变量。

//圆圈的角度
float   degree;
//圆周率
float   pi = 3.14159;
//圆的半径
int     r = 5;
//上下圆圈的判断符
bool    flg = true;

然后在绘制图像的那个方法里面,找到如果粒子生命<0的这段逻辑,在这段逻辑里面,如果粒子生命<0,那么就将粒子满血复活,并赋予新的坐标。我们要改的就是给新生粒子赋予新坐标的这段代码。

因为是画圆圈,已知角度、半径的情况下,就可以算出圆圈上某点的坐标,代码如下:

particle[loop].x=sin(degree*pi/180)*r;
particle[loop].y=cos(degree*pi/180)*r+ (flg?5.0:-5.0);

这里需要注意的是,sincos这两个方法所用的参数应该是弧度。所以我们还得先将角度算成弧度,公式如下:

弧度 = 角度*PI/180  

而算y轴坐标的后面那段代码:

(flg?5.0:-5.0)

的作用是区分该圆是上圆还是下圆。

通过以上代码,可以算是圆的坐标,那么接下来我们要写一段逻辑,来算圆的轨迹。轨迹的示意图如下表示:

从以上示意图,我们可以得到以下逻辑:

复制代码
    //步奏一
        if(degree >0 && degree <180 && flg==true)
    {
        flg = true;
    }
        //步奏二
    else if(degree ==180 && flg == true)
    {
        flg = false;
        degree = 360;
    }
        //步奏三
    else if(degree ==0 && flg == false)
    {
        flg = true;
        degree = 181;
    }
        //步奏四
    else if(degree >=360 && flg == true)
    {
        degree = 0;
    }
        
       //根据上下圆,相应的递增或递减
    if(flg)
    {
        degree += 1;
    }
    else
    {
        degree -= 1;
    }    
复制代码

最后画面画出来的结果是:

以下是绘图部分的所有代码,是NEHE教程的基础上略有增减,希望能对你有帮助。

  

posted @   のんきネコ  阅读(1191)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示