opengl高级编程与可视化系统开发中 有一个例子的意思 想请教大家

haojj123 2011-12-07 11:52:34
这个例子是用粒子系统来模拟导弹的尾焰,其中的一部分程序如下所示:
// 烟雾运动的数据初始化程序
for(t=0;t<MAXSMOKEMISSILE;t++)
{
if(smoke_mis[t].active==false)
{
smoke_mis[t].x=var.xmis;
smoke_mis[t].y=var.ymis;
smoke_mis[t].z=var.zmis+3;
smoke_mis[t].active=true;
smoke_mis[t].anx=0;
smoke_mis[t].any=0;
smoke_mis[t].anz=0;
smoke_mis[t].dim=(float)(rand()%100)/100;
smoke_mis[t].ddim=(float)0.1;
smoke_mis[t].r=1;
smoke_mis[t].g=1;
smoke_mis[t].b=1;
smoke_mis[t].dx=(float)(rand()%100-rand()%100)/1000;
smoke_mis[t].dy=(float)(rand()%100-rand()%100)/1000;
smoke_mis[t].dz=-var.vmis/1.2;
}
else
{
smoke_mis[t].x+=smoke_mis[t].dx;
smoke_mis[t].y+=smoke_mis[t].dy;
smoke_mis[t].z+=smoke_mis[t].dz;
smoke_mis[t].dx/=1.001;
smoke_mis[t].dy/=1.001;
smoke_mis[t].dz/=1.001;
smoke_mis[t].dim+=smoke_mis[t].ddim;
if(smoke_mis[t].dim>1.5)
smoke_mis[t].active=false;
smoke_mis[t].r-=0.01;
smoke_mis[t].g-=0.01;
smoke_mis[t].b-=0.01;
if(smoke_mis[t].r==0)
smoke_mis[t].active=false;
// 绘制尾部烟雾
if(smoke_mis[t].active==true)
Luce(smoke_mis[t].x,smoke_mis[t].y,smoke_mis[t].z,smoke_mis[t].dim,smoke_mis[t].r,smoke_mis[t].g/2,smoke_mis[t].b/3,var.xcam,var.ycam,var.zcam,3);


//这是尾焰显示的程序,是用四边形纹理贴图模拟的
void CMissileTestView:uce(double x, double y, double z,double dimensione,float r,float g,float b,float iox,float ioy,float ioz,int Tex)
{
Vector Position;
Vector MyPosition;
Position.x = x;
Position.y = y;
Position.z = z;
MyPosition.x=iox;
MyPosition.y=ioy;
MyPosition.z=ioz;
Vector sight = VectorDiff(MyPosition, Position);
Vector cz;//看来与这个线性数组设置无关
cz.x = 1;
cz.y = 2;
cz.z = 1;
Vector cross1 = VectorMultiply( sight, cz );
Vector cross2 = VectorMultiply( sight, cross1 );
cross1 = VectorNormalize(cross1);
cross2 = VectorNormalize(cross2);
cross1 = VectorScalarMultiply(cross1, dimensione);
cross2 = VectorScalarMultiply(cross2, dimensione);
glColor3f(r,g,b);
glEnable(GL_TEXTURE_2D);
glEnable (GL_BLEND);
glBlendFunc( (1,1,1,1), (1,1,1,1));
glDepthMask (GL_FALSE);
glBindTexture( GL_TEXTURE_2D, texture[Tex] );
glBegin(GL_QUADS);
glTexCoord2d( 0.0, 0.0 );
glVertex3d( Position.x + cross1.x, Position.y + cross1.y, Position.z + cross1.z);
glTexCoord2d( 1.0, 0.0 );
glVertex3d( Position.x - cross2.x, Position.y - cross2.y, Position.z - cross2.z);
glTexCoord2d( 1.0, 1.0 );
glVertex3d( Position.x - cross1.x, Position.y - cross1.y, Position.z - cross1.z);
glTexCoord2d( 0.0, 1.0 );
glVertex3d( Position.x + cross2.x, Position.y + cross2.y, Position.z + cross2.z);
glEnd();
glDisable(GL_TEXTURE_2D);
glDisable (GL_BLEND);
glDepthMask (GL_TRUE);
}

这个程序一直没有搞明白,所以想请教大牛?我也类似的做了一个导弹的模型,用以上的方法来模拟尾焰,但是尾焰画出来只是一个四边形的东西,根本显示不了逼真的尾焰模型。
...全文
125 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
haojj123 2011-12-07
  • 打赏
  • 举报
回复
anybodys???

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧