SweetDream
高歌一壶新酿酒,醉抱青山不必归。
1. 多边形的填充方式。

多边形有两个面:正面和被面,默认的情况下,正面和背面都是以填充的方式绘制多边形,但通过 void glPolygonMode(GLenum face,GLenum mode) 可以改变绘制方式。其中参数 face的取值为GL_FRONT_AND_BACK,GL_FRONT,GL_BACK;参数mode取值为GL_POINT,GL_LINE,GL_FILL

2. 角度与弧度的换算

弧度与角度都是为了度量角度的大小。因为Sin函数的参数需要的是弧度,如果我们只有角度的话就需要从角度到弧度的换算,一个圆周的角度是360,而它的弧度为2π(π= 3.141592654 ),所以如果已知角度为n,则弧度为(2π/360) * n;如果已知弧度为m,则角度为 (m / 2π) * 360

3.模拟波动

设置初始状态的波动图

for(int x=0; x<45; x++)

{

        for(int y=0; y<45; y++)

        {

            points[x][y][0]=float((x/5.0f)-4.5f);

            points[x][y][1]=float((y/5.0f)-4.5f);

            /** sin函数需要一个弧度值,

                (x/5.0f)*40.0f得到的是角度值,从左到右刚好一个正玄

                /360.0f*3.141592654*2.0f就得到弧度值了

            */

           points[x][y][2]=float(sin((((x/5.0f)*40.0f)/360.0f)*3.141592654*2.0f));

        }

    }

 

每隔3帧波动一次,这个速度比较合适。

if( wiggle_count == 2 )//帧计数

    {

        for( y = 0; y < 45; y++ )

        {

            hold=points[0][y][2];//hold保持最左边点的深度值

            for( x = 0; x < 44; x++)

            {

//每个点==x方向前一个点,因为波的传播方向为x方向

                points[x][y][2] = points[x+1][y][2];           

}

//一个周期结束后最右边的点=最左边的点,使其不断的波动

            points[44][y][2]=hold;

        }

        wiggle_count = 0;

    }

posted on 2006-02-23 10:50  SweetDream  阅读(437)  评论(0编辑  收藏  举报