|
|
发表于 2007-10-21 20:25:00
|
显示全部楼层
Re:求喷泉源码
void CalcParticle()
{
GLuint i;
GLfloat rho;
GLfloat theta;
if(cnt < 150)
cnt++;
for (i = 0 ; i < cnt ; i++)
{
if ( sp.bLive )
{
sp.speed.data.adata[1] -= G * TIMESLICE ;
sp.pos.data.adata[0] += sp.speed.data.adata[0] * TIMESLICE;
sp.pos.data.adata[1] += sp.speed.data.adata[1] * TIMESLICE;
sp.pos.data.adata[2] += sp.speed.data.adata[2] * TIMESLICE;
if (sp.pos.data.adata[1] < BOTTOM)
{
sp.bLive = false;
}
}
else
{
memset(&sp.pos, 0, sizeof(sp.pos));
rho = (rand() % 20) * PI / 180;
theta = (rand() % 360) * PI / 180;
sp.speed.data.adata[2] = SCALAR_SPEED * cos(theta) * sin(rho);
sp.speed.data.adata[0] = SCALAR_SPEED * sin(theta) * sin(rho);
sp.speed.data.adata[1] = SCALAR_SPEED * cos(rho);
sp.bLive = true;
}
}
}
void DrawSpring(const Coordinate4& CamPos, GXCShape* ps)
{
GLuint i;
GLfloat rotAngle;
Vector4 vecDiff;
Vector4 rotAxis;
Vector4 ZAxis;
ZAxis.data.adata[0] = 0;
ZAxis.data.adata[1] = 0;
ZAxis.data.adata[2] = 1;
ZAxis.data.adata[3] = 1;
for ( i = 0 ; i < cnt ; i++ )
{
if (sp.bLive)
{
vecDiff = sp.pos - CamPos;
CrossProduct(vecDiff.data.adata, ZAxis.data.adata, rotAxis.data.adata);
rotAngle = CalculateAngle(vecDiff, ZAxis) / PI * 180;
glPushMatrix();
glTranslatef(sp.pos.data.adata[0], sp.pos.data.adata[1], sp.pos.data.adata[2]);
glRotatef(-rotAngle, rotAxis.data.adata[0], rotAxis.data.adata[1], rotAxis.data.adata[2]);
ps->Draw();
glPopMatrix();
}
}
}
|
|