Ok. I see. I think we have the same thoughts. However I am trying to make a scene graph approach… Like my code for a tree node is like this…
gzNode *buildTree()
{
gzGeometry *geom=new gzGeometryTube(40,1,5,5,GZ_TUBE_CONE,xyfunk,10,10);
geom->useDisplayList(TRUE);
geom->setLocalIncludeBoundary(TRUE);
gzTransform *endNode=new gzTransform;
endNode->setScale(0.4,0.7,0.4);
endNode->addNode(geom);
gzRecursive *tree=new gzRecursive;
tree->setLocalIncludeBoundary(TRUE);
tree->setDistanceDepthEquation(1000,1);
tree->setMaxDepthNode(endNode);
gzMaterial *material=new gzMaterial;
gzState *state=new gzState;
state->setMaterial(material);
state->setMode(GZ_STATE_MATERIAL,GZ_STATE_ON);
gzTexture *tex=new gzTexture;
tex->setImage(gzImageManager::loadImage(“bark.bmp”));
tex->setWrapS(GZ_REPEAT);
tex->setWrapT(GZ_REPEAT);
state->setTexture(tex);
state->setMode(GZ_STATE_TEXTURE,GZ_STATE_ON);
geom->setState(state);
gzTransform *trans_1=new gzTransform;
trans_1->setLocalIncludeBoundary(TRUE);
trans_1->setScale(0.5,0.5,0.5);
trans_1->addNode(geom);
tree->addNode(trans_1);
gzGroup *crown=new gzGroup;
crown->setLocalIncludeBoundary(TRUE);
gzTransform *trans_2=new gzTransform;
trans_2->setLocalIncludeBoundary(TRUE);
trans_2->setHPR(0,-20,10);
trans_2->setScale(0.2,0.5,0.2);
trans_2->addNode(tree);
crown->addNode(trans_2);
gzTransform *trans_3=new gzTransform;
trans_3->setLocalIncludeBoundary(TRUE);
trans_3->setScale(0.2,0.5,0.2);
trans_3->setHPR(0,-30,80);
trans_3->addNode(tree);
crown->addNode(trans_3);
gzTransform *trans_4=new gzTransform;
trans_4->setLocalIncludeBoundary(TRUE);
trans_4->setScale(0.2,0.5,0.2);
trans_4->setHPR(0,30,-50);
trans_4->addNode(tree);
crown->addNode(trans_4);
gzTransform *trans_5=new gzTransform;
trans_5->setLocalIncludeBoundary(TRUE);
trans_5->setScale(0.2,0.5,0.2);
trans_5->setHPR(0,-30,-30);
trans_5->addNode(tree);
crown->addNode(trans_5);
gzTransform *trans_6=new gzTransform;
trans_6->setLocalIncludeBoundary(TRUE);
trans_6->setTranslation(0,20,0);
tree->addNode(trans_6);
trans_6->addNode(crown);
gzTransform *trans_7=new gzTransform;
trans_7->setLocalIncludeBoundary(TRUE);
trans_7->setTranslation(0,10,0);
tree->addNode(trans_7);
trans_7->addNode(crown);
tree->setMaxDepth(3);
return tree;
}