Hi Rober,
I understand and I thank you for quick responses. The OSG community is really great and library also I would like to thank everybody for responses.
 
I am a newbie at OSG. I did some work on directx, but that was quite different.
 
With my starfield, I basically created a hierarhy of nodes. That's what osg is for, right? Then I remembered my two nodes (matrixtransformx) and I apply to them new matrix before each frame? Is this practice OK?
 
I don't fully understand your advice. You suggest that I don't use matrixtransforms, but instead custom transform? Why? Can't matrixtransform be changed every frame? Is it slow/wrong?
 
The purpose of my class is to create infinite starfield that ship moves through. I do this by repeating cluster of stars again and again on all x,y,z dimensions. I do this with one matrix, with mod operator. With other matrix I amplify speed of movement through startfield, simply by multiplying current position of ship.
 


 
2006/11/10, Robert Osfield <[EMAIL PROTECTED]>:
HI Ivan,

I'm afriad reviewing and debugging user code goes a bit beyond what I
can do, there are over 1500 developers on osg-users now.

As a general note having pointers to nodes higher in the hierachy
isn't good practice.  Why not just move the clipnode transform around
relative to the current view matrix by using a cull callback or custom
Transform that computes the require matrix on the fly.

Robert.

On 11/10/06, Ivan Bolčina <[EMAIL PROTECTED]> wrote:
> Can you see something fundamental wrong in my code, because thats seems to
> happen. Maybe it is a problem with Delta3D, which uses OSG. I asked there
> but if anyone sees a potential problem in following code, it would be great.
>
> thanks,
> ivan
>
> /////////////////////////
> ///header
>
>
>
> class SpaceField : public dtCore::DeltaDrawable
>
> {
>
> public:
>
> SpaceField();
>
> virtual ~SpaceField();
>
>
>
> void Init();
>
> void UpdatePosition(osg::Vec3 position,osg::Vec3 speed);
>
> virtual osg::Node * GetOSGNode ();
>
> virtual const osg::Node * GetOSGNode () const ;
>
> protected:
>
> osg::MatrixTransform * mTransformShip;
>
> osg::MatrixTransform * mTransformField;
>
> osg::Group * mLocalRoot;
>
> osg::Group * mNode;
>
> int NumberOfVertex;
>
> int NumberOfVertexInBox;
>
> int Radius;
>
> int Frontier;
>
> osg::Vec3 Camera;
>
> osg::Vec3 Center;
>
> };
>
>
>
>
> ////////////////////////////////////////////////
>
> ///here I build hierearhy
>
> //////////////////////////////////////////////////
>
> void SpaceField::Init()
>
> {
>
> //group that holds field
>
> osg::Group* group = new osg::Group();
>
> //base vertices
>
> osg::Vec3Array* base_vertices = new
> osg::Vec3Array(NumberOfVertexInBox);
>
>
>
> for (int i=0;i<NumberOfVertexInBox;i++)
>
> {
>
> float x1=random(0,1)*Frontier;
>
> float x2=random(0,1)*Frontier;
>
> float x3=random(0,1)*Frontier;
>
> (*base_vertices)[i].set(x1,x2,x3);
>
> }
>
>
>
>
>
>
>
> for (int i=0;i<3;i++)
>
> for (int j=0;j<3;j++)
>
> for (int k=0;k<3;k++)
>
> {
>
> osg::Geometry* geometry = new osg::Geometry;
>
>
>
> // set up vertices
>
> osg::Vec3Array* vertices = new
> osg::Vec3Array(NumberOfVertexInBox);
>
> geometry->setVertexArray(vertices);
>
>
>
> float xo=Frontier*i-1.5*Frontier;
>
> float yo=Frontier*j-1.5*Frontier;
>
> float zo=Frontier*k-1.5*Frontier;
>
> for (int idx=0;idx<NumberOfVertexInBox;idx++)
>
> {
>
> (*vertices)[idx].set((*base_vertices)[idx].x()+xo,
>
> (*base_vertices)[idx].y()+yo,
>
> (*base_vertices)[idx].z()+zo);
>
> }
>
> osg::Vec4Array* colours = new
> osg::Vec4Array(NumberOfVertexInBox);
>
> geometry->setColorArray(colours);
>
> geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
>
> for (int i=0;i<NumberOfVertexInBox;i++)
>
> {
>
> double shade=random(0.7,1);
>
> (*colours)[i].set(shade,shade,shade,shade);
>
> }
>
> osg::DrawElementsUShort* points = new
> osg::DrawElementsUShort(GL_POINTS,NumberOfVertex);
>
> geometry->addPrimitiveSet(points);
>
> for(int i=0;i<NumberOfVertexInBox;++i)
>
> {
>
> (*points)[i] = i;
>
> }
>
> geometry->setUseDisplayList(false);
>
>
>
> osg::Geode* geode = new osg::Geode;
>
> geode->addDrawable(geometry);
>
> geode->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
>
> geode->setCullingActive(true);
>
> group->addChild(geode);
>
>
>
> }
>
>
>
> // set up colours
>
>
>
> // set up the points for the stars.
>
>
>
> mNode=group;
>
> mLocalRoot=new osg::Group();
>
> mTransformShip=new osg::MatrixTransform();
>
> mLocalRoot->addChild(mTransformShip);
>
> mTransformField=new osg::MatrixTransform();
>
>
>
> osg::ClipNode *cn=new osg::ClipNode();
>
> cn->createClipBox(osg::BoundingBox(-Frontier,-Frontier,-Frontier,
>
> Frontier,Frontier,Frontier));
>
> mTransformShip->addChild(cn);
>
> cn->addChild(mTransformField);
>
> mTransformField->addChild(mNode);
>
> }
>
> //////////////////////////////////////////////////////////////////////////
>
> //here I apply frame-to-frame transformations
>
> //////////////////////////////////////////////////////////////////////////
>
> void SpaceField::UpdatePosition(osg::Vec3
> position,osg::Vec3 speed)
>
> {
>
> osg::Vec3 star=position;
>
> star*=10.;
>
> double x=star.x();
>
> double y=star.y();
>
> double z=star.z();
>
> x=MathUtil::MUmod(x,Frontier);
>
> y=MathUtil::MUmod(y,Frontier);
>
> z=MathUtil::MUmod(z,Frontier);
>
> star=osg::Vec3(x,y,z);
>
> star*=-1.;
>
> osg::Matrix matrix=mTransformShip->getMatrix();
>
> matrix.setTrans ( position.x(), position.y(),position.z());
>
> mTransformShip->setMatrix(matrix);
>
> osg::Matrix matrix2=mTransformField->getMatrix();
>
> matrix2.setTrans ( star.x(), star.y(),star.z());
>
> mTransformField->setMatrix(matrix2);
>
> }
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://openscenegraph.net/mailman/listinfo/osg-users
> http://www.openscenegraph.org/
>
>

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/


_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to