查看: 3367|回复: 13

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

[复制链接]

该用户从未签到

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

(1)CMAKE的配置
cmake配置.jpg

(2)采用SPARK静态lib
静态lib.jpg

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

(3)采用SPARK动态lib
动态lib.jpg

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

该用户从未签到

发表于 2013-5-8 10:00:52 | 显示全部楼层
给这个Drawable 设置一个 initBound 就可以了啊

该用户从未签到

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

该用户从未签到

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

确实!release下可以~谢谢您,再请教您一个问题。我想给予粒子一个位置(世界坐标系),这样可以指定位置下实现烟花。我看了spark官方pdf,于是做了小改动:
            // Creates the emitter
        SPK::RandomEmitter* emitter = SPK::RandomEmitter::create();
         emitter->setZone( SPK:oint::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方向不对?而且貌似是局部坐标?

该用户从未签到

发表于 2013-5-7 08:26:51 | 显示全部楼层
应该是包围盒的问题吧,给这个gromerty设置一个默认的包围盒 试试

该用户从未签到

 楼主| 发表于 2013-5-7 10:25:54 | 显示全部楼层
liuzhiyu123 发表于 2013-5-7 08:26
应该是包围盒的问题吧,给这个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)程序刚运行时的样子:
1.jpg

(2)按一下空格键
2.png

该用户从未签到

发表于 2013-5-8 08:31:19 | 显示全部楼层
感觉还是包围盒的问题啊,程序第一帧的时候 你那个粒子是不是计算不出包围盒 所以摄像机的位置看不到它?

该用户从未签到

 楼主| 发表于 2013-5-8 09:00:01 | 显示全部楼层
liuzhiyu123 发表于 2013-5-8 08:31
感觉还是包围盒的问题啊,程序第一帧的时候 你那个粒子是不是计算不出包围盒 所以摄像机的位置看不到它?

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

该用户从未签到

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

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

该用户从未签到

 楼主| 发表于 2013-5-8 15:12:54 | 显示全部楼层
liuzhiyu123 发表于 2013-5-8 10:00
给这个Drawable 设置一个 initBound 就可以了啊

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

该用户从未签到

发表于 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位的失败了。

该用户从未签到

发表于 2019-2-18 13:59:28 | 显示全部楼层
冰舞胧煌 发表于 2013-12-18 11:15
请问下,osgspark可以在vs2010上的64位的osg上使用么?之前用vs2008搞32位的搞成功了,但64位的失败了。

我也想知道,64位的如何编译,我编译过程中出现了很多失败。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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