Leaf::Leaf(const std::string& name, const double branchThickness, const double branchLength) : SceneNode(name) { ImagePrimitive* i_leaf = new ImagePrimitive(); GeometryNode* leaf = new GeometryNode("Leaf", i_leaf); leaf->set_material(&leafTexture); double upDist = rand(1.0/3.0, 1.0, branchLength); double zAngle = rand(0.0, 1.0, 360.0); double diagonalDist = branchThickness + sqrt(2.0) - 0.25; double xyDist = -diagonalDist * sqrt(2.0) / 2.0; leaf->rotate('z', zAngle); leaf->translate(Vector3D(xyDist, xyDist, upDist)); add_child(leaf); }