简体   繁体   English

图像随着OSG中的旋转消失

[英]Image is disappearing with rotation in OSG

I have a simple OSG program which makes an x, y axis and randomises points inside of this axis. 我有一个简单的OSG程序,该程序制作一个x,y轴并将该轴内部的点随机化。 The intention is that this will lead on to making a 3d viewer for laser scan data. 这样做的目的是要为激光扫描数据制作3D查看器。 (I know its been done before but we need it to be super light weight). (我知道它之前已经做过,但我们需要使其重量超轻)。 Here is the code: 这是代码:

#include <osg/Node>
#include <osg/Group>
#include <osg/Geode>
#include <osg/Geometry>
#include <osg/Texture2D>
#include <osgDB/ReadFile> 
#include <osgViewer/Viewer>
#include <osg/PositionAttitudeTransform>
#include <osgGA/TrackballManipulator>
#include <time.h>
#include <cstdlib>

void addAxis(osg::ref_ptr<osg::Group> root) {


//ADD Y-Axis
osg::ref_ptr<osg::Geode> lineGeode = new osg::Geode();
osg::ref_ptr<osg::Geometry> yAxis = new osg::Geometry(), xAxis = new osg::Geometry();

lineGeode->addDrawable(yAxis);
lineGeode->addDrawable(xAxis);
root->addChild(lineGeode);


osg::ref_ptr<osg::Vec3Array> lineVertices = new osg::Vec3Array;
lineVertices->push_back( osg::Vec3( 0, 0, 0) );
lineVertices->push_back( osg::Vec3(0, 10, 0) );


yAxis->setVertexArray( lineVertices );

osg::ref_ptr<osg::DrawElementsUInt> lineBase =
    new osg::DrawElementsUInt(osg::PrimitiveSet::LINES, 0);
lineBase->push_back(1);
lineBase->push_back(0);
yAxis->addPrimitiveSet(lineBase);


osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //index 0 red
yAxis->setColorArray(colors);
yAxis->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE);



//ADD X Axis
lineVertices = new osg::Vec3Array;
lineVertices->push_back( osg::Vec3( 0, 0, 0) );
lineVertices->push_back( osg::Vec3(10, 0, 0) );


xAxis->setVertexArray( lineVertices );

lineBase =
    new osg::DrawElementsUInt(osg::PrimitiveSet::LINES, 0);
lineBase->push_back(1);
lineBase->push_back(0);
xAxis->addPrimitiveSet(lineBase);


colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f) ); //index 0 red
xAxis->setColorArray(colors);
xAxis->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE);

}

void addPoint(osg::ref_ptr<osg::Group> root, std::vector<double> pointIn) {
 osg::ref_ptr<osg::Geode> pointGeode = new osg::Geode();
osg::ref_ptr<osg::Geometry> pointGeometry = new osg::Geometry();



pointGeode->addDrawable(pointGeometry);
root->addChild(pointGeode);

osg::ref_ptr<osg::Vec3Array> point = new osg::Vec3Array;
point->push_back( osg::Vec3( pointIn[0], pointIn[1], pointIn[2]) );

pointGeometry->setVertexArray( point );

osg::ref_ptr<osg::DrawElementsUInt> points =
    new osg::DrawElementsUInt(osg::PrimitiveSet::POINTS, 0);

points->push_back(0);
points->push_back(2);
points->push_back(1);
pointGeometry->addPrimitiveSet(points);


osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); 

 pointGeometry->setColorArray(colors);
    pointGeometry->setColorBinding(osg::Geometry::BIND_PER_PRIMITIVE);
}


int main()
{
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> root = new osg::Group();

addAxis(root);


std::vector<double> point;
for (int i = 0; i < 3; i++)
   point.push_back(0);
srand(time(NULL));

root->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
viewer.setSceneData( root );

viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.realize();
int count = 0;
while( !viewer.done() )
{
    if (count == 200) {
    point[0] = (double)rand()*10.0/(double)INT_MAX;
    point[1] = (double)rand()*10.0/(double)INT_MAX;
    count = 0;
    }
    count++;
    addPoint(root, point);

    viewer.frame();



}

return 0;
}

This code works, it will generate a 10 unit long x/y axis and begin to generate random points inside that axis. 此代码有效,它将生成一个10单位长的x / y轴,并开始在该轴内部生成随机点。 However the issue is that when I rotate the image in the OSG viewer the whole image often disappears. 但是问题是,当我在OSG查看器中旋转图像时,整个图像通常会消失。 Sometimes it can be brought back by rotating back to where you started but more often it will disappear forever. 有时可以通过旋转回到开始的位置来恢复它,但更多的时候它将永远消失。

Has anyone got an idea about why this is happening? 有谁知道为什么会这样吗?

I figured it out, the reason in this case is that the points are updating too fast. 我知道了,在这种情况下,原因是这些点更新太快。 This is causing the visualizer extreme difficulty with rendering the image as the points are coming in to fast. 随着点变得越来越快,这使可视化器在渲染图像时遇到了极大的困难。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM