查看: 1112|回复: 2

跃动的线

[复制链接]

该用户从未签到

发表于 2014-5-22 20:47:07 | 显示全部楼层 |阅读模式
#include <osg/LineWidth>
#include <osg/Geometry>
#include <osg/Geode>
#include <osgViewer/Viewer>

class DynamicLineCallback :public osg:rawable::UpdateCallback{
public:
        DynamicLineCallback() :_angle(0.0){}//initialize the value of _angle

        virtual void update(osg::NodeVisitor* nv, osg::Drawable* drawable){
                osg::Geometry* geom = static_cast<osg::Geometry*>(drawable);
                if (!geom) return;

                osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geom->getVertexArray());
                if (vertices){
                        for (osg::Vec3Array::iterator itr = vertices->begin(); itr != vertices->end() - 1; ++itr)
                                itr->set((*(itr + 1)));

                        _angle += 1.0 / 10.0;
                        osg::Vec3& pt = vertices->back();
                        pt.set(10.0*cos(_angle), 0.0, 10.0*sin(_angle));
                        vertices->dirty();
                }
        }
protected:
        float _angle;
};

int main(int argc, char** argv){
        osg::ref_ptr<osg::Vec3Array>vertices = new osg::Vec3Array(10);
        for (unsigned int i = 0; i < 10; ++i)
                (*vertices)[i].set(float(i), 0.0, 0.0);

        osg::ref_ptr<osg::Geometry>lineGeom = new osg::Geometry;
        lineGeom->setVertexArray(vertices.get());
        lineGeom->addPrimitiveSet(new osg::DrawArrays(osg::DrawArrays:INE_STRIP, 0, 10));
        lineGeom->setInitialBound(osg::BoundingBox(osg::Vec3(-10.0, -10.0, -10.0), osg::Vec3(10.0, 10.0, 10.0)));
        lineGeom->setUpdateCallback(new DynamicLineCallback);
        lineGeom->setUseDisplayList(false);
        lineGeom->setUseVertexBufferObjects(true);

        osg::ref_ptr<osg::Geode>geode = new osg::Geode;
        geode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
        geode->getOrCreateStateSet()->setAttribute(new osg::LineWidth(2.0));
        geode->addDrawable(lineGeom.get());

        osgViewer::Viewer viewer;
        viewer.setSceneData(geode.get());
        return viewer.run();
}


为什么我的程序可以运行,但是没有图像,直接就运行完毕了。。。大神指教一下!在win7   vs2013下运行的

该用户从未签到

 楼主| 发表于 2014-5-22 20:50:48 | 显示全部楼层
表情   应该是DrawArrays和LineWidth
还有 就是   osg::Vec3& pt = vertices->back();
               pt.set(10.0*cos(_angle), 0.0, 10.0*sin(_angle));
Vec3& 定义的是什么啊   在吗从来没见过。

新手 求指导a !

该用户从未签到

发表于 2014-5-23 11:34:13 | 显示全部楼层
每次更新顶点坐标之后,请dirtyBound以确保包围体的计算也是正确的
还有&是引用符号,这应该是C++里很基础的概念了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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