opengl显示列表画兔子

本文探讨了OpenGL中的显示列表用于优化大量图形绘制的效率,以兔子为例展示了如何创建和使用显示列表。文章详细介绍了显示列表的创建、兔子数量的动态增加、根据兔子数量调整桌子大小的策略,以及计算和显示FPS的方法。实验结果显示,使用显示列表模式在增加兔子数量时,FPS下降幅度小于立即模式,验证了显示列表的效率优势。
摘要由CSDN通过智能技术生成

1.      显示列表

显示列表是一组存储在一起的OpenGL函数,可以在以后执行。调用一个显示列表时,它所存储的函数就会按照顺序执行。OpenGL的显示列表更像是命令缓存器,而不是动态数据库,即当一个显示列表被创建之后创建显示列表以glNewList开始,以glEndList结束。通过glCallList可以调用显示列表。

尽管无法保证自己使用的OpenGL实现是否会针对任何特定用途对显示列表进行优化,但是显示列表的执行速度无论如何也不会比线性地执行存储在显示列表中的函数更慢。当然,显示列表也存在一定的开销,如果显示列表非常小,使用显示列表的开销可能会超过它所带来的的好处。在这次实验中,使用两个显示列表tableList和rabbitList分别绘制桌子和兔子。

创建显示列表的函数如下所示:

GLint GenTableList()

{

    GLint lid=glGenLists(2);//2个空显示列表

    glNewList(lid, GL_COMPILE);//创建桌子显示列表

        DrawTable();

    glEndList();

    glNewList(lid + 1, GL_COMPILE);//兔子显示列表

        DrawBunny();

    glEndList();

    return lid;

}

使用显示列表绘制桌子和兔子的函数如下所示:

void Draw_Table_List()

{

    glPushMatrix();

    glTranslatef(2.2, 4.5, 1.5);

    glScalef(2, 2, 2);

    //画兔子

    for (int i = 1; i <= NumberOfRabbit && i<=16; i++) {

        glCallList(rabbitList);

        if (i % 4 == 0) //换行

            glTranslatef(2.1f, 0, -0.5f);

        else

            glTranslatef(-0.7f, 0.0f, 0.0f);

    }

 

    glPopMatrix();

    glCallList(tableList);

}

       每画完一个兔子就进行平移,当遇到四的倍数时换行,重新从第一个开始画。

 

2.      兔子数量的增加

使用全局变量NumberOfRabbit记录兔子数量,兔子的数量无上限,但是最少是1。

void key(unsignedchark, intx, inty)

{    ……

case'i'://兔子数量增加

    {

        NumberOfRabbit++;

        Row = (NumberOfRabbit+3) / 4;

        break;

    }

   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值