我要发帖 回复

游客

4

主题

1万

积分

0

专家分

:

私信
发表时间 : 2006-9-18 20:21:16 | 浏览 : 3545    评论 : 10
如何实现地面积雪效果?请教高手点思路

最近VR访客

vrer 评论于2006-9-18 21:41:04
两种方法,vega的特效或者用openGL实现,vega特效实现时,把粒子所在的范围的Z值设的和你场景的地面一致(需要是平面),然后把粒子生命周期设的足够长,就会在地面产生积累效果。openGL实现时比较复杂,原理同上,关键技术也是设置粒子的周期。
duduwenzi 评论于2006-9-19 08:35:02
谢谢,我试试看,用vega
duduwenzi 评论于2006-9-19 09:29:18
请问和下面的属性有关吗?可以解释一下吗?
VGFX_DURATION
VGFX_FADEDUR
VGFX_FADEINDUR
和下面这两个函数也有关吗?可以解释一下吗?好像在帮助中查不到
vgFxIsectorMask
vgFxRepresent
大侠帮忙
vrer 评论于2006-9-19 10:59:26
vgFx *pRainFx;
        pRainFx = vgNewFx( VGFX_CUSTOM );
        vgName( pRainFx, "Rain" );

        vgProp( pRainFx, VGFX_ALPHA, 1.0 );               
        vgProp( pRainFx, VGFX_AUTO, VGFX_RESTART ); //VG_OFF                       
        vgProp( pRainFx, VGFX_DURATION, VGFX_ALWAYS );               
        vgProp( pRainFx, VGFX_FADEDUR, VGFX_SAMEASDURATION );
        vgPosition *pos;
        pos = vgNewPos();
        vgPosVec( pos, 0.0, 10.0, 40.0, 0.0, 0.0, 0.0 );
        vgFxOffset( pRainFx, pos );
        vgPosVec( pos, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 );
        vgPos( pRainFx, pos );
        vgFxIsectorMask( pRainFx, 0x0 );
        vgFxRepresent( pRainFx, 0xffffffff );
        vgFxScale( pRainFx, 1.0, 1.0, 1.0 );
        vgProp( pRainFx, VGFX_STATE, VG_ON );
        vgProp( pRainFx, VGFX_STARTTIME, VGFX_NOW );
        vgProp( pRainFx, VGFX_XFORMDLIST, VGFX_XFORM );
        vgProp( pRainFx, VGFX_NPARTICLES, 1000.0 );        
        vgProp( pRainFx, VGFX_SRCRAD, 30.0 );
        vgProp( pRainFx, VGFX_SIZEVAR, 0.07 );
        vgProp( pRainFx, VGFX_COLORVAR, 0.09 );               
        vgProp( pRainFx, VGFX_VDIST, VGFX_VDIST_PLANE );
        vgProp( pRainFx, VGFX_SRCSHAPE, VGFX_SRCSHAPE_SQUARE );        
        vgProp( pRainFx, VGFX_FLOW, VGFX_FLOW_STREAM );
        float ct[5] = { 0.0, 0.5, 0.5, 0.5, 0.5 };
        vgAttrList( pRainFx, VGFX_CT, ct, 1 );
        float bBox[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
        vgAttrList( pRainFx, VGFX_BBOX, bBox, 1 );
        float vVector[4] = { 0.0, 0.0, 0.0, -10.0 };
        vgAttrList( pRainFx, VGFX_VVECTOR, vVector, 1 );
        float wVector[4] = { 0.0, -30.0, 0.0, 0.0 };
        vgAttrList( pRainFx, VGFX_WVECTOR, wVector, 1 );
        float gVector[3] = { 0.0, 0.0, -40.0 };
        vgAttrList( pRainFx, VGFX_GVECTOR, gVector, 1 );
        float vRnd[2] = { 0.0, 0.0 };
        vgAttrList( pRainFx, VGFX_VRANDOM, vRnd, 1 );
        float vSphere[2] = { 0.0, 0.0 };
        vgAttrList( pRainFx, VGFX_VSPHERE, vSphere, 1 );
        float psz[2] = { 0.0, 0.05f };
        vgAttrList( pRainFx, VGFX_PSZ, psz, 1 );
        float pst[2] = { 0.0, 30.0 };
        vgAttrList( pRainFx, VGFX_PST, pst, 1 );
        float temp[2] = { 0.0, 293.0 };
        vgAttrList( pRainFx, VGFX_TEMPERATURE, temp, 1 );
        vgFxColor( pRainFx, 0.627451f, 0.627451f, 0.627451f );        
        vgProp( pRainFx, VGFX_LCYCLE, 2.0 );
        vgProp( pRainFx, VGFX_EMISSION, 0.0 );        
        vgProp( pRainFx, VGFX_LIGHTING, VG_OFF );
        vgDelPos( pos );
        vgAddSceneFx( vgGetScene( 0 ), pRainFx );
        vgProp( pRainFx, VGFX_STATE, VG_OFF );

以上是vega中下雨的代码,下雪类似,只需改个别参数和贴图,你所说的几个属性和函数里面都有用到,所以是有用的。另外,用vega实现下雨或者下雪时,只能在有限的范围内,这个范围和设置的bounding box有关,并不能在整个场景里都有雪的效果,所以积雪效果也一样。最好的办法还是用openGL来实现,只是会复杂许多。
duduwenzi 评论于2006-9-20 10:49:07
vgFx *pSnowFx;
        pSnowFx = vgNewFx( VGFX_CUSTOM );
        vgName( pSnowFx, "snow" );

        vgProp( pSnowFx, VGFX_ALPHA, 1.0 );
        vgProp( pSnowFx, VGFX_AUTO, VG_OFF);//VGFX_RESTART
        vgProp( pSnowFx, VGFX_DURATION, VGFX_ALWAYS );
        vgProp( pSnowFx, VGFX_FADEDUR, VGFX_SAMEASDURATION );
        vgFxIsectorMask( pSnowFx, 0x0 );
        vgFxRepresent( pSnowFx, 0xffffffff );
        vgFxScale( pSnowFx, 0.3f, 0.3f, 0.3f );

        vgProp( pSnowFx, VGFX_STATE, VG_ON);
        vgProp( pSnowFx, VGFX_STARTTIME, VGFX_NOW );
        vgProp( pSnowFx, VGFX_XFORMDLIST, VGFX_XFORM );

        vgProp( pSnowFx, VGFX_NPARTICLES, 2500.0 );
        vgProp( pSnowFx, VGFX_SRCRAD, 400.0 );
        vgProp( pSnowFx, VGFX_SIZEVAR, 0.0);
        vgProp( pSnowFx, VGFX_COLORVAR, 0.0 );
        vgProp( pSnowFx, VGFX_VDIST, VGFX_VDIST_PLANE );
        vgProp( pSnowFx, VGFX_SRCSHAPE, VGFX_SRCSHAPE_CIRCLE);
        vgProp( pSnowFx, VGFX_FLOW, VGFX_FLOW_STREAM );

        float ct[5] = { 0.0, 1.0, 1.0, 1.0, 1.0 };
        vgAttrList( pSnowFx, VGFX_CT, ct, 1 );
        float bBox[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
        vgAttrList( pSnowFx, VGFX_BBOX, bBox, 1 );
        float vVector[4] = { 0.0, 0.0, 0.0, -0.5};
        vgAttrList( pSnowFx, VGFX_VVECTOR, vVector, 1 );
        float wVector[4] = { 0.0, 2.0, 0.0, 0.0 };
        vgAttrList( pSnowFx, VGFX_WVECTOR, wVector, 1 );
        float gVector[3] = { 0.0, 0.0, -6.0 };
        vgAttrList( pSnowFx, VGFX_GVECTOR, gVector, 1 );

        float vRnd[2] = { 0.0, 5.0 };
        vgAttrList( pSnowFx, VGFX_VRANDOM, vRnd, 1 );
        vRnd[0]=1.0,vRnd[1]=10.0;
        vgAttrList( pSnowFx, VGFX_VRANDOM, vRnd, 1 );
        vRnd[0]=2.0,vRnd[1]=20.0;
        vgAttrList( pSnowFx, VGFX_VRANDOM, vRnd, 1 );
        vRnd[0]=3.0,vRnd[1]=20.0;
        vgAttrList( pSnowFx, VGFX_VRANDOM, vRnd, 1 );
        vRnd[0]=4.0,vRnd[1]=10.0;
        vgAttrList( pSnowFx, VGFX_VRANDOM, vRnd, 1 );

        float vSphere[2] = { 0.0, 0.0 };
        vgAttrList( pSnowFx, VGFX_VSPHERE, vSphere, 1 );
        float psz[2] = { 0.0, 3.0f };
        vgAttrList( pSnowFx, VGFX_PSZ, psz, 1 );
        float pst[2] = { 0.0, 1.0f };
        vgAttrList( pSnowFx, VGFX_PST, pst, 1 );
        float temp[2] = { 0.0, 293.0 };
        vgAttrList( pSnowFx, VGFX_TEMPERATURE, &temp, 1 );
        vgFxColor( pSnowFx, 1.0, 1.0, 1.0 );
        vgProp( pSnowFx, VGFX_LCYCLE, 10.0 );
        vgProp( pSnowFx, VGFX_EMISSION, 0.0 );
        vgProp( pSnowFx, VGFX_LIGHTING, VG_OFF );
        vgAddSceneFx( vgGetScene( 0 ), pSnowFx );
        vgProp( pSnowFx, VGFX_STATE, VG_OFF );               
这是雪的代码,我就是不知道改哪些属性就变成积雪了,请指教
vrer 评论于2006-9-20 12:25:58
两段代码比较一下不就得了呵呵,其实可以把雪的特效在lynx里设好,在程序里调用即可,华中科大编的那本vega书中有现成的例子。
duduwenzi 评论于2006-10-14 11:02:14
还是搞不定?唉
bluewater_fish 评论于2006-11-28 11:13:21
大虾能不能发个完整的代码给我看看,这些我都试了的,就是没有看到特效阿,不解中。。。
大家帮哈忙啊。。
eggbert 评论于2007-8-4 13:40:47

地面积雪效果

地面积雪效果原理是什么呢?
lvxueqiao 评论于2007-9-12 20:42:32
谢谢,我试试看,用vega

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-2-27 02:40 AM

返回顶部