查看: 2105|回复: 7

怎样让风向随时间的改变而改变呢?

[复制链接]

该用户从未签到

发表于 2009-6-8 23:48:58 | 显示全部楼层 |阅读模式
比如,现在雪是垂直下落,过几秒后随着风向的改变开始有角度……
最好能实现循环,垂直下落……有角度的下落……垂直下落……
应该可以吧?

该用户从未签到

发表于 2009-6-9 10:13:08 | 显示全部楼层
setWind()

该用户从未签到

 楼主| 发表于 2009-6-9 15:53:49 | 显示全部楼层
原帖由 array 于 2009-6-9 10:13 发表
setWind()

setwind()这个我知道,那么……怎么才能通过时间改变setwind()的值呢?
我承认我笨死了……

该用户从未签到

发表于 2009-6-9 15:58:20 | 显示全部楼层
也许您可以写一个UpdateCallback,并在其中改变setWind的值试一下,但是我个人并不知道这样是否会起作用

该用户从未签到

 楼主| 发表于 2009-6-10 00:44:27 | 显示全部楼层
原帖由 array 于 2009-6-9 15:58 发表
也许您可以写一个UpdateCallback,并在其中改变setWind的值试一下,但是我个人并不知道这样是否会起作用

还是不明白,那我应该把时间放在什么地方呢?
就是说,这个语法是怎样的呢?

该用户从未签到

发表于 2009-6-10 01:03:21 | 显示全部楼层
或者你直接申请一个计时器,,手动控制随时间改变风向,,,那样你最直接了~~~~~
osg::Timer~~~~~~~~

该用户从未签到

 楼主| 发表于 2009-6-10 03:30:53 | 显示全部楼层
这个看来成了不好解决的大问题了,
我想通过C语言里的时间函数改变风向的坐标参数来实现雪飘方向的渐变,可是编译通过后学的方向却一直不变的。
大概是运行到viewer.run();以后就不再接着运行了吧……

代码如下
#include "stdafx.h"
#include <iostream>   
#include <string.h>
#include <time.h>  
#include <algorithm>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgParticle/PrecipitationEffect>
#include <osg/Node>
       
float dir1;
float dir2;
float dir3;


               
  

void show()
{
        osgViewer::Viewer viewer;

        osg::ref_ptr<osgParticle:recipitationEffect> precipitationEffect = new osgParticle::PrecipitationEffect;
        //precipitationEffect->setParticleSpeed( 40000)  ;

       
        precipitationEffect->snow(0.12);
         precipitationEffect->setWind(osg::Vec3(dir1, dir2, dir3));
       
        precipitationEffect->setParticleColor(osg::Vec4(1, 1, 1, 1));
        precipitationEffect->setWind(osg::Vec3(dir1, dir2, dir3));
       
        //precipitationEffect->setUseFarLineSegments(true);


   
        osg::Group * root = new osg::Group() ;
        root ->addChild(precipitationEffect.get ()) ;
        root ->addChild(osgDB::readNodeFile("zl.osg")) ;

        viewer.setSceneData(root);
    viewer.realize();
    viewer.run();



  }



int main()
{  
dir1=0;
dir2=0;
dir3=0;
        int second = 0;

while(true)
        {
         time_t time_now = time(0);
     struct tm *time_p = gmtime(&time_now);
     if (time_p->tm_sec != second)
                  {   
            if (time_p->tm_sec % 3 == 0)
                                 {  
                                        dir1=dir1+0.5;
                                cout<<"The   current   time   is :"<<dir1<< endl;   
   
                                    
         second = time_p->tm_sec; //更新临时变量   
         }   
      
}   
  }  
}
       
   现在可以肯定的是想通过C++里的传统语言来动态地改变运行中的场景是不行了。
可是timer还不知道怎么用。
话说那个API里的内容怎么理解呢?

该用户从未签到

发表于 2009-6-10 08:45:57 | 显示全部楼层
您大可先阅读一下OSG的各种基础教程,了解一下UpdateCallback的用法。我甚至没有找到您的show()函数是在什么地方调用的……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表