mxl12315 发表于 2013-5-2 15:02:05

新手求助:有关Array的osgspark问题

   我下载了SPARK-1.5.5_SDK和osgRecipes,但因为Spark官网提供的lib分为静态和动态。我就在CMake配置过程中,SPARK_GL LIBRARY、SPARK LIBIRARY分别进行尝试,最后osgspark工程进行生成的时候,无论采用Spark的哪种lib,全都报错。。。本人是64位机子+VS2008+WIN7。。。应该不是机子问题吧?跪求解答~

(1)CMAKE的配置


(2)采用SPARK静态lib


静态lib情况下,对osgSpark编译的错误:


(3)采用SPARK动态lib


动态lib情况下,对osgspark编译出现的错误

liuzhiyu123 发表于 2013-5-8 10:00:52

给这个Drawable 设置一个 initBound 就可以了啊

array 发表于 2013-5-6 17:15:25

(2)不是编译错误,看起来像是您的链接库有问题。我是用静态SPARK来执行的,您可以实验运行一下RELEASE版本

mxl12315 发表于 2013-5-6 17:41:59

array 发表于 2013-5-6 17:15 static/image/common/back.gif
(2)不是编译错误,看起来像是您的链接库有问题。我是用静态SPARK来执行的,您可以实验运行一下RELEASE版本 ...

确实!release下可以~谢谢您,再请教您一个问题。我想给予粒子一个位置(世界坐标系),这样可以指定位置下实现烟花。我看了spark官方pdf,于是做了小改动:
            // Creates the emitter
        SPK::RandomEmitter* emitter = SPK::RandomEmitter::create();
         emitter->setZone( SPK::Point::create(SPK::Vector3D(1.0f, 0.0f, 0.0f)) );    //烟花的位置!

   可是烟花的位置确实x轴负方向上的。。。。我更改坐标为(10.0,0.0,0.0)。。程序运行后看不到,你必须鼠标滚轮缩小,看到x轴老远处才有一个烟花。。。难道我这样赋予粒子位置不对吗?
   可是SPK::Point* source = SPK::Point::create(SPK::Vector3D(1.0f, 0.0f, 0.0f));也是一个效果?总感觉坐标轴x,y,z方向不对?而且貌似是局部坐标?

liuzhiyu123 发表于 2013-5-7 08:26:51

应该是包围盒的问题吧,给这个gromerty设置一个默认的包围盒 试试

mxl12315 发表于 2013-5-7 10:25:54

liuzhiyu123 发表于 2013-5-7 08:26 static/image/common/back.gif
应该是包围盒的问题吧,给这个gromerty设置一个默认的包围盒 试试

您好,Spark当中的“SPK_System”当中已经提供了计算(或设置)粒子系统的包围盒方法computeAABB()和enableAABBComputing(),我也已经写入程序中:
SPK::System* system = SPK::System::create();
        system->addGroup( group );
        system->enableAABBComputing( true );
        system->computeAABB();

可是效果还是那样子,我加入了个glider(坐标为(0.0,0.0,0.0)),写了一个烟花(坐标为(5.0,0.0,0.0));程序运行后,就看到飞机,没有烟花,你需要按空格键,窗口才能显示飞机,旁边远处是个烟花。。。。

我看到osgSpark中的smoke粒子,飞机做一个路径动画飞行,机身后部的黄烟也跟着飞机一起走。。。对比过代码,可还是找不到为什么那个例子可以,我这个就这囧?跪求指导:'(

(1)程序刚运行时的样子:


(2)按一下空格键

liuzhiyu123 发表于 2013-5-8 08:31:19

感觉还是包围盒的问题啊,程序第一帧的时候 你那个粒子是不是计算不出包围盒 所以摄像机的位置看不到它?

mxl12315 发表于 2013-5-8 09:00:01

liuzhiyu123 发表于 2013-5-8 08:31 static/image/common/back.gif
感觉还是包围盒的问题啊,程序第一帧的时候 你那个粒子是不是计算不出包围盒 所以摄像机的位置看不到它?

嗯,值都是0,请问如何设置一个包围盒?
                 osg::ComputeBoundsVisitor boundvisitor;
                geometry类对象->accept(boundvisitor);
                osg::BoundingBox bb;
                 bb=boundvisitor.getBoundingBox();
               是这个嘛??

mxl12315 发表于 2013-5-8 15:12:03

array 发表于 2013-5-6 17:15 static/image/common/back.gif
(2)不是编译错误,看起来像是您的链接库有问题。我是用静态SPARK来执行的,您可以实验运行一下RELEASE版本 ...

      还需请教您一个问题,我发现spark和osgParticle在粒子循环上很不同,osgParticle中设置完生命周期,超过周期的粒子就消亡了,循环反复(比如喷泉、雨雪等)。。。但spark中设置完生命周期(我认为烟花的生命周期就是烟花中每个小颗粒存活时间),开始都一样,但后来烟花不再循环(或者说不知道如何设置烟花每隔多长时间产生)——
       我已经加入进烟花,但我想让整个粒子系统每隔5S产生一个烟花,不知针对spark中哪个类,实现什么方法?第一次用,跪求指点

mxl12315 发表于 2013-5-8 15:12:54

liuzhiyu123 发表于 2013-5-8 10:00 static/image/common/back.gif
给这个Drawable 设置一个 initBound 就可以了啊

嗯,基本效果可以了~谢谢您

array 发表于 2013-5-13 09:23:35

spark有大量的回调可以用,比osgParticle更容易控制逻辑

冰舞胧煌 发表于 2013-12-5 11:44:11

用vs2010可以么?

冰舞胧煌 发表于 2013-12-18 11:15:11

array 发表于 2013-5-6 17:15
(2)不是编译错误,看起来像是您的链接库有问题。我是用静态SPARK来执行的,您可以实验运行一下RELEASE版 ...

请问下,osgspark可以在vs2010上的64位的osg上使用么?之前用vs2008搞32位的搞成功了,但64位的失败了。

haha 发表于 2019-2-18 13:59:28

冰舞胧煌 发表于 2013-12-18 11:15
请问下,osgspark可以在vs2010上的64位的osg上使用么?之前用vs2008搞32位的搞成功了,但64位的失败了。

我也想知道,64位的如何编译,我编译过程中出现了很多失败。
页: [1]
查看完整版本: 新手求助:有关Array的osgspark问题